【发布时间】:2010-06-02 13:16:20
【问题描述】:
#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++ virtual-functions