Khi bạn có một phương pháp học cơ sở khai báo là virtual
, Để ghi đè lên nó, bạn cần phải cung cấp một chức năng với cùng một chữ ký chính xác trong lớp Derived (kiểu trả về Co-biến được phép mặc dù).
Nếu tên hàm của bạn là tương tự nhưng chữ ký trong lớp Derived thay đổi từ một trong lớp cơ sở hơn nó không được overidding nữa, Đó là function Hiding, phương pháp lớp được thừa kế ẩn phương thức của lớp cơ sở.
Chức năng Quá tải không bao giờ nằm trong các lớp học, Bạn có thể quá tải các phương thức trong cùng một lớp hoặc các chức năng miễn phí nhưng không vượt quá các lớp. Khi bạn cố gắng để làm điều đó trên các lớp học, những gì bạn cuối cùng nhận được là ẩn chức năng.
Để đưa các phương thức lớp Cơ sở trong phạm vi lớp Bắt nguồn của bạn, bạn cần thêm
bổ sung using functionName
, vào lớp Có nguồn gốc của bạn.
EDIT:
Đối với Q của khi sử dụng virtual
trên quá tải, câu trả lời là:
Nếu bạn có ý định chức năng của lớp học của bạn được ghi đè cho polymorphism runtime bạn nên đánh dấu chúng là virtual
, và không nếu bạn không có ý định như vậy.
Tốt đọc:
When to mark a function in C++ as a virtual?
Nguồn
2012-03-18 07:15:24
Để quá tải hàm thành viên lớp cơ sở trong lớp dẫn xuất, bạn chỉ cần khai báo 'using'. – Potatoswatter
@Potatoswatter: Có, bạn cần phải làm điều đó ngoài việc chỉ cung cấp các phương pháp để theo nghĩa đó, nó còn hơn là chỉ cung cấp các phiên bản quá tải. –
Tôi cũng đã cố gắng để xây dựng một câu trả lời, nhưng tôi không thể giải thích sự khác biệt giữa việc thực hiện một chức năng trong cơ sở ảo hay không. Bạn có thể quá tải cả hai trong cùng một cách trong một lớp học có nguồn gốc (với một chữ ký khác nhau). Và tôi nghĩ đó là một phần của câu hỏi của OP. –