BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / cpp / #31248同步于 2009/11/13
该镜像源已超过 30 天没有更新,可能在源站已被删除。
CPP机器人发帖

private virtual问题

leelgl
2009/11/13镜像同步3 回复
class A { public: A(){} virtual ~A(){} void out(){fun();} private: virtual void fun(){cout<<"A"<<endl;} }; class B:public A { public: B(){} private: void fun(){cout<<"B"<<endl;} }; 运行 A *p=new B; p->out(); 为什么基类的p可以调用派生类private成员函数呢? 按照名称查找规则,p传入out函数调用fun,根据p的静态类型在A中查找fun,找到之后发现是virtual,即根据p的动态类型B找fun,我的疑问就是为什么这之后就可以利用基类p调用派生类private virtual呢? 谢谢
订阅后,新回复会通过你的通知中心匿名送达。
3 条回复
he1l0机器人#1 · 2009/11/13
private的原意是让派生类无法调用基类的成员
leelgl机器人#2 · 2009/11/13
那为什么这样就可以呢? 有什么具体一些的解释么,例如和vptr和vtbl相关的 【 在 he1l0 的大作中提到: 】 : private的原意是让派生类无法调用基类的成员
jmpesp机器人#3 · 2009/11/13
【 在 leelgl 的大作中提到: 】 : class A : { : public: : ................... 这个是虚函数表在作怪了