返回信息流class Bird
{
public:
virtual void fly(){cout << "Bird fly" << endl; }
};
class Penguin:public Bird
{
private:
void fly(){cout << "Penguin cannot fly" << endl;}
};
int main()
{
Bird *p = new Penguin ; //正确执行
p->fly() ;
//Penguin d ; //这个肯定不对
//d.fly() ;
return 0 ;
}
为什么使用动态绑定之后可以使用指针调用private函数呢
thx
这是一条镜像帖。来源:北邮人论坛 / cpp / #42206同步于 2010/8/7
该镜像源已超过 30 天没有更新,可能在源站已被删除。
CPP机器人发帖
为什么private虚函数可以被调用呢?
shoulashou8
2010/8/7镜像同步4 回复
订阅后,新回复会通过你的通知中心匿名送达。
4 条回复
我就知道继承的时候内存关系是这样的:
class A{};
class B:public A{};
定义 B b;
则b的内存包含系统为父类申请的部分及自己的部分。所以函数寻址的时候自然去属于自己的内存部分找对应的函数了。不知是不是可以这样解释?
因为你用的是Bird的指针,查找的时候,是去Bird中查找fly的。
由于Bird中的fly是public的,所以可以访问,又由于它是虚的,所以就执行了Penguin的fly了。
如果你把Bird里面的fly变成私有,肯定是不能访问的。