簡體   English   中英

如何重寫一個抽象類的虛函數調用另一個抽象類

[英]How to override a virtual function of an Abstract class calling another abstract class

我有一個關於抽象類和純虛函數的問題,當我嘗試使用抽象類時,我發現純虛函數返回另一個抽象類的實例,代碼如下:

 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的指針返回。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM