gpt4 book ai didi

c++ - 为什么我的虚拟方法没有被覆盖?

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:32:48 26 4
gpt4 key购买 nike

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

为什么第二行不是derive的乐趣

最佳答案

当您在基类构造函数中调用 fun() 时,派生类尚未构造(在 C++ 中,首先构造一个构造的父类),因此系统没有实例尚未派生,因此 Derived::fun() 的虚函数表中没有条目。

这就是为什么通常不赞成在构造函数中调用虚函数的原因,除非您特别想要调用虚函数的实现,该虚函数是当前正在实例化的对象的一部分或一个对象的一部分它的祖先。

关于c++ - 为什么我的虚拟方法没有被覆盖?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4404978/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com