为了账号安全,请及时绑定邮箱和手机立即绑定

调用构造函数中的虚拟函数

调用构造函数中的虚拟函数

C++ C
繁华开满天机 2019-06-01 10:38:07
调用构造函数中的虚拟函数假设我有两个C+类:class A{public:   A() { fn(); }   virtual void fn() { _n = 1; }   int getn() { return _n; }protected:   int _n;};class B : public A{public:   B() : A() {}   virtual void fn() { _n = 2; }};如果我编写以下代码:int main(){   B b;   int n = b.getn();}人们可能会想到n设置为2。结果证明n设置为1。为什么?
查看完整描述

3 回答

?
慕婉清6462132

TA贡献1804条经验 获得超2个赞

原因是C+对象是像洋葱一样从内到外构造的。超类是在派生类之前构造的。所以,在制造B之前,必须先制造A。当调用A的构造函数时,它还不是B,因此虚拟函数表仍然有A的fn()副本的条目。


查看完整回答
反对 回复 2019-06-01
  • 3 回答
  • 0 关注
  • 495 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信