class Base
{
public:
Base()
{
cout<<"base class"<<endl;
fun();
}
virtual void fun(){cout<<"fun of base"<<endl;}
};
class Derive:public Base
{
public:
Derive()
{
cout<<"derive class"<<endl;
fun();
}
void fun(){ cout<<"fun of derive"<<endl;}
};
void main()
{
Derive d;
}
输出是:
base class
fun of base
derive class
fun of derive
为什么第二行不是fun of derive
?
你打电话时fun()
在基类构造函数中,派生类尚未构造(在 C++ 中,首先对构造的父类进行分类),因此系统还没有 Derived 实例,因此虚函数表中没有条目Derived::fun()
.
这就是为什么在构造函数中调用虚函数通常不受欢迎的原因,除非你具体来说想要调用虚函数的实现,该虚函数要么是当前正在实例化的对象的一部分,要么是其祖先之一的一部分。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)