2011-10-13 44 views

Trả lời

21

Trong C++ nếu bạn khai báo phương thức virtual trong lớp cơ sở thì nó cũng nằm trong lớp dẫn xuất, ngay cả khi từ khóa virtual bị bỏ qua.

Tuy nhiên, vì mục đích tài liệu, tôi rất vui được lặp lại nó.

0

Khi một lớp kế thừa hàm ảo, bất kỳ khai báo mới, ghi đè nào của hàm đó sẽ tự động được tạo ảo, ngay cả khi từ khóa virtual không được sử dụng.

2

Chức năng vẫn là ảo (giả sử nó có cùng một hoặc một chữ ký covariant). Sử dụng virtual khi ghi đè thừa.

+3

Nó có thể là dự phòng cho trình biên dịch nhưng nó là tài liệu tốt cho bất kỳ người nào sử dụng lớp. –

+0

@LokiAstari: đúng. – PlasmaHH

5

Bạn không thể thực hiện một chức năng không ảo, vì vậy nó sẽ vẫn ảo và một cuộc gọi đến chức năng nói chung cũng là ảo. Tất nhiên, có những tình huống mà trình biên dịch sẽ có thể tối ưu hóa điều này và thực hiện cuộc gọi trực tiếp, nhưng không bảo đảm trong trường hợp của bạn.

1

Phương thức ảo được tạo để tác động lên lớp dẫn xuất (Khi bạn đánh dấu một phương thức là ảo. Nó sẽ sử dụng vtable trên các lớp dẫn xuất). Và các phương pháp ghi đè sẽ là ảo.

Các vấn đề liên quan