我有一个主要类,“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”。有办法解决这个问题吗?
答案 0 :(得分:1)
通过将= 0
放在虚拟方法声明的末尾,您将其设为纯虚拟。因此,您告诉编译器基类中没有提供任何实现,并且任何派生类必须提供一个。由于派生类B
未实现method2
,因此您会收到该错误消息。编译器完全按照你的说法进行操作。
如果您实际上并不想强制所有派生类实现虚函数,那么您不应该使纯虚拟。因此,您将删除= 0
并在基类中提供某种默认实现。根据您的设计,这可以像virtual void method2(int) { }
否则,派生类必须实现所有纯虚方法。因此,在您发布的代码中,B
和C
都需要实现method1
和method2
。