#include<iostream>
using namespace std;
class base
{
public:
virtual void add() {
cout << "hi";
}
};
class derived : public base
{
private:
void add() {
cout << "bye";
}
};
int main()
{
base *ptr;
ptr = new derived;
ptr->add();
return 0;
}
Tôi không có một vấn đề với cách này được thực hiện. Tôi hiểu bạn sử dụng vtables và vtable có nguồn gốc chứa địa chỉ của hàm add() mới. Nhưng add() là private nên trình biên dịch tạo ra một lỗi khi tôi cố gắng truy cập nó bên ngoài lớp? Bằng cách nào đó nó không có vẻ đúng.
Ghi đè và truy cập thông số là các khái niệm trực giao. – sbi
vtables là chi tiết triển khai. –