thể trùng lặp:
Private virtual method in C++C++: chức năng ảo cá nhân so với khái niệm hàm ảo thuần túy
Nếu tôi hiểu đúng từ bài này (Private virtual method in C++), làm cho một hàm ảo trong một lớp cơ sở làm cho các lớp dẫn xuất có thể ghi đè lên nó. Nhưng dường như mọi thứ dừng lại ở đó.
Nhưng nếu hàm lớp ảo cơ sở là thuần túy, sẽ buộc các lớp dẫn xuất thực hiện hàm. Do đó, một chức năng ảo thuần túy (public) chỉ đơn thuần là một giao diện. Tôi có thể thấy một lợi ích ở đây.
Mặt khác, bằng cách đặt một lớp cơ sở hàm ảo riêng tư, chỉ cung cấp cho lớp dẫn xuất khả năng ghi đè hàm, nhưng tôi thấy không có lợi ích gì về điều này. Nó giống như là chức năng ảo riêng đó không có ở đó. Lớp dẫn xuất rõ ràng là không biết về sự tồn tại của hàm ảo đó trong lớp cơ sở vì nó là riêng, vì vậy có lợi ích nào khi khai báo một lớp riêng ảo cơ sở, về mặt thừa kế hay đa hình?
Ngoài ra, có bất kỳ tình huống nào mà một lớp cơ sở khai báo một hàm 'thuần ảo' và 'riêng tư' không?
Cảm ơn bạn.
Tại sao tuyên bố nó được bảo vệ nếu bạn biết rằng bạn sẽ không bao giờ cần truy cập vào phương thức cơ sở từ các lớp dẫn xuất? Bạn có thể ghi đè điều gì đó mà không cần phải gọi nó. –
http://www.parashift.com/c++-faq-lite/private-virtuals.html – Samson
Không có lý do gì * nên * được khai báo là 'được bảo vệ'. Nếu bạn cần 'bảo vệ', hãy sử dụng nó. Nếu không, hãy sử dụng 'private'. – juanchopanza