概述
链接:https://www.nowcoder.com/questionTerminal/94b0fd680ede438ca7fdde4888a39537
来源:牛客网
class A
{
public:
A ():m_iVal(0){test();}
virtual void func() { std::cout<<m_iVal<<‘ ’;}
void test(){func();}
public:
int m_iVal;
};
class B : public A
{
public:
B(){test();}
virtual void func()
{
++m_iVal;
std::cout<<m_iVal<<‘ ’;
}
};
int main(int argc ,char* argv[])
{
A*p = new B;
p->test();
return 0;
}
以下程序输出结果是:0, 1, 2
解析:构造函数不建议调用虚函数。如果构造函数调用虚函数的话,基类的构造函数调用基类的虚函数。派生类的构造函数调用派生类自身的虚函数。派生类实例化的时候,会先调用基类的构造函数,这时候就是调用基类自身的虚函数。然后,派生类调用自身的构造函数,这时候就会调用派生类自身的虚函数。实例化以后,虽然指针声明为基类指针,但实际调用的是派生类的函数。如果派生类里面有两个同样的非虚函数,使用基类指针调用的话会调用基类的函数。
最后
以上就是懦弱小鸽子为你收集整理的C++:构造函数中调用虚函数的全部内容,希望文章能够帮你解决C++:构造函数中调用虚函数所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复