#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;
}
输出为bye
为什么我可以通过派生对象的基类指针访问派生的私有成员函数?
我没有用,这是如何实现的问题。我知道你使用vtables,并且派生的vtable包含新的add()函数的地址。但是,当我试图在类之外访问它时,add()是否是私有的,不应该编译器生成错误?不知怎的,这看起来不正确。
覆盖和访问说明符是正交概念。 – sbi 2010-08-31 19:28:33
vtables是一个实现细节。 – 2011-05-11 09:24:37