为声明为纯虚拟的方法提供实现的效果是什么。它是否使Base类非抽象? Derived类是否仍然需要提供实现?
class Base
{
public:
Base();
~Base();
virtual void abstractMethod() = 0;
private:
uint32_t data;
};
class Derived : public Base
{
public:
Derived();
~Derived();
};
void Base::abstractMethod() { data = 1; }
答案 0 :(得分:4)
实现纯虚函数不会改变规则。函数仍然是纯粹的,类仍然是抽象的,派生类仍然必须用非纯函数覆盖它,必须实现它。
如果纯函数有实现,则可以非虚拟地调用它:
object.Base::abstractMethod();
如果有一些派生类可能想要使用的通用实现(或部分实现),这可能很有用;他们可以简单地实现他们的覆盖来调用该实现。