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

问题描述 投票:-1回答:2

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

 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()你对这个解决方案有什么看法谢谢任何回应。

c++ class abstract virtual-functions
2个回答
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
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.