gpt4 book ai didi

c++ - 覆盖与虚拟

转载 作者:IT老高 更新时间:2023-10-28 12:29:34 28 4
gpt4 key购买 nike

在函数前面使用保留字 virtual 的目的是什么?如果我希望子类覆盖父函数,我只需声明相同的函数,例如 void draw(){}

class Parent { 
public:
void say() {
std::cout << "1";
}
};

class Child : public Parent {
public:
void say()
{
std::cout << "2";
}
};

int main()
{
Child* a = new Child();
a->say();
return 0;
}

输出为 2。

那么,为什么 say() 的头部需要保留字 virtual

非常感谢。

最佳答案

如果函数是虚拟的,那么你可以这样做并且仍然得到输出“2”:

Parent* a = new Child();
a->say();

这是因为 virtual 函数使用 actual 类型,而非虚拟函数使用 declared 类型。阅读 polymorphism以便更好地讨论您为什么要这样做。

关于c++ - 覆盖与虚拟,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2932909/

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