#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;
}
Run Code Online (Sandbox Code Playgroud)
输出是 bye
我对这是如何实现没有问题.我理解你使用vtable和派生的vtable包含新的add()函数的地址.但是当我尝试在类外部访问它时,add()是私有的,不应该编译器生成错误吗?不知怎的,这似乎不对.