Tôi thường sử dụng các hàm ảo thuần túy cho các phương thức được mã của tôi yêu cầu để hoạt động tốt. Vì vậy, tôi tạo ra các giao diện và sau đó những người dùng khác thực hiện các lớp dẫn xuất của họ. Các lớp dẫn xuất chỉ có các hàm ảo này là công khai trong khi một số phương thức bổ sung nên được thực hiện dưới dạng riêng tư vì mã của tôi không gọi chúng. Tôi không biết nếu điều này có thể được coi là một thực hành tốt của OOP (có bất kỳ mẫu thiết kế nào không?). Dù sao, câu hỏi của tôi là: Người dùng có thể quá tải một chức năng ảo thuần túy không?Quá tải chức năng ảo tinh khiết
ví dụ:
class Base
{
public:
Base();
virtual ~Base();
virtual void foo(int,double)=0;
};
class Derived:
public Base
{
private:
// methods
public:
Derived();
virtual ~Derived();
virtual void foo(int, double, double); //this doesn't work
};
Một giải pháp có thể là:
virtual void foo(int,double,double=0)=0;
trong lớp cơ sở nhưng nó là rất hạn chế. Bạn nghĩ về điều gì?
Quá tải chức năng đại diện cho ** API khác **. Lớp cơ sở trừu tượng đại diện cho ** API nhất quán **. Vì vậy, không, điều này không có ý nghĩa. –
Chẳng phải ví dụ của bạn còn thiếu 'class Derived: Base'? – nonsensickle
@nonsensical: đúng, tôi vừa chỉnh sửa. cảm ơn – Ale