如何覆盖调用另一个抽象类的Abstract类的虚函数

时间:2013-12-17 11:53:30

标签: c++ class abstract virtual-functions

我对抽象类和纯虚函数有疑问,当我尝试使用抽象类时,我发现纯虚函数返回另一个抽象类的实例,代码是这样的:

 class A{
    virtual B *newB()=0;    
    }

B级太抽象了:

class B{
virtual void function1()=0;
virtual void function2()=0;    
}

然后我有我的头文件C.hpp,我正在呼叫A类:

class C: A{
virtual B *newB();    
}

在我的C.cpp文件中,我输入了我的代码:

#include "C.hpp"
 B *C::newB(){
return new B;
}

它不能返回B的实例,因为它太抽象了。所以我怎么能继续解决这个问题,我建议创建另一个继承自B并覆盖function1和function2的类,之后我可以调用这个新的D()而不是新的B()你对这个解决方案有什么看法谢谢任何回应。

2 个答案:

答案 0 :(得分:3)

为什么会获得成员函数newD?你可以简单地使用:

B* C::newB() {
  return new D; // D* converts to B*, if B is a public base class of D
}

您可能想要回忆一下虚函数和抽象类的用途。它们提供隐藏实现差异的接口。 C::newB的调用者只关心一件事:我可以像B一样使用一个对象。类C决定调用者获得的接口的实现。这通常称为Factory Pattern

答案 1 :(得分:1)

这不是“回归”的问题,而是“新B”。你不能'新'抽象类。您必须实例化一个派生自B的具体类。您可以愉快地将其作为指向B的指针返回。