gpt4 book ai didi

C++ 虚函数意外行为

转载 作者:太空宇宙 更新时间:2023-11-04 15:42:19 25 4
gpt4 key购买 nike

我有这条鳕鱼:

class First{
public:
virtual void print(){cout<<"First";}

};

class Second : public First {
public:
virtual void print(){cout<<"Second";}


};
class Third : public Second{
public:
void print(){cout<<"Third";}

int main(){
Third ob;
ob.print();
Second& sec=ob;
sec.print();
First& frs=ob;
frs.print();
}

一切如我所料,所有 3 个打印:"Third"。

现在因为我的代码太多,基本上是一样的,稍微改动一下,我会在正文中讨论。

现在我从 First 中的 print 中删除了 virtual,它打印出:“Third Third First”,如我所料。

这第三次,我在 First 中放回了 virtual,但我从 Second 中删除了它。现在它打印:“三三三”。嗯,这不是我所期望的。可以说,当引用 First 时,它发现函数是虚拟的,然后检查对象并调用 Third 的方法,但是当引用 Second 时,它发现函数不是虚拟的,为什么它仍然调用 Third 的打印?

最佳答案

如果一个函数覆盖了一个虚函数,那么无论您是否显式声明它,它都是虚函数。所以这里 Second::print 是虚拟的,无论您如何声明它。

关于C++ 虚函数意外行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21240505/

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