gpt4 book ai didi

c++ - 为什么我必须在覆盖 [C++] 时重新声明一个虚函数

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

#include <iostream>
using namespace std;

class Duck {
public:
virtual void quack() = 0;
};

class BigDuck : public Duck {
public:
// void quack(); (uncommenting will make it compile)

};

void BigDuck::quack(){ cout << "BigDuckDuck::Quack\n"; }

int main() {
BigDuck b;
Duck *d = &b;
d->quack();

}

上面的代码无法编译。但是,当我声明虚函数时在子类中,然后它编译得很好。

如果编译器已经有了子类将要覆盖的函数的签名,那为什么还需要重新声明呢?

有什么见解吗?

最佳答案

需要重新声明是因为:

  • 标准是这样说的。
  • 通过不爬上层级来检查此类函数是否存在,使编译器的工作更容易。
  • 您可能希望在层次结构中声明它。
  • 为了实例化类,编译器必须知道这个对象是具体的。

关于c++ - 为什么我必须在覆盖 [C++] 时重新声明一个虚函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2957984/

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