#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();
}
上記のコードはコンパイルされません。ただし、サブクラスで仮想関数を宣言すると、正常にコンパイルされます。
サブクラスがオーバーライドする関数のシグネチャがコンパイラにすでにある場合、なぜ再宣言が必要なのですか?
洞察はありますか?