我有一个关于抽象类和纯虚函数的问题,当我尝试使用抽象类时,我发现纯虚函数返回另一个抽象类的实例,代码是这样的:
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()你对这个解决方案有什么看法谢谢任何回应。
为什么你会得到一个成员函数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
。
这不是“回归”的问题,而是“新B”。你不能'新'抽象类。您必须实例化一个派生自B的具体类。您可以愉快地将其作为指向B的指针返回。