这可能看起来像一个简单的问题,但我无法在其他地方找到答案。是否需要在派生类中实现所有虚函数?
假设我有以下几点:
class Abstract {
public:
virtual void foo() = 0;
virtual void bar();
}
class Derived : Abstract {
public:
virtual void foo();
}
它是确定该类派生没有实现吧()函数? 如果不是我的所有派生类都需要bar()函数,但有一些做。 是否需要在派生类中实现抽象基类的所有虚函数,还是只需要在纯虚函数中实现? 感谢
即使这个(实施纯虚函数)仅当它们旨在被实例化(相对于作为一个抽象基类本身)。 –
这就是我的想法。但是我在我的项目中这样做,我得到一个链接错误,说Derived :: bar()有一个“无法解析的外部符号”;但是我从来没有在Derived中声明bar,那么为什么链接器在寻找函数体? – mikestaub
@pixelpusher当然'Derived :: bar'有一个函数体,即'Abstract :: bar'。所以看起来翻译单元在哪里被定义(它甚至定义在任何地方?)没有链接到它被调用的翻译单元中。 –