停止在子类中传播虚方法

时间:2014-01-18 23:23:20

标签: c++

我有一个主要类,“A”,以及两个子类“B”和“C”,有一些方法

Class A
{
    virtual bool method1() const = 0;
    virtual void method2(int) = 0;
}

Class B : public A
{
    bool method1() const;
}

Class C : public A
{
    void method2(int);
}

但是当我尝试声明一个新的B对象时,我的编译器说我“无法实例化抽象类,纯虚函数A :: method2有nos overrider”。有办法解决这个问题吗?

1 个答案:

答案 0 :(得分:1)

通过将= 0放在虚拟方法声明的末尾,您将其设为纯虚拟。因此,您告诉编译器基类中没有提供任何实现,并且任何派生类必须提供一个。由于派生类B未实现method2,因此您会收到该错误消息。编译器完全按照你的说法进行操作。

如果您实际上并不想强制所有派生类实现虚函数,那么您不应该使纯虚拟。因此,您将删除= 0并在基类中提供某种默认实现。根据您的设计,这可以像virtual void method2(int) { }

一样简单

否则,派生类必须实现所有纯虚方法。因此,在您发布的代码中,BC都需要实现method1method2