簡體   English   中英

在C ++中的虛擬基類的兩種實現之間共享方法

[英]Sharing methods between two implementations of a virtual base class in C++

我有一個虛擬基類和兩個實現各種方法的類。 對於這兩種方法之一,這兩個類具有相同的功能。 我可以在兩個類之間共享實現以消除冗余代碼嗎? 除了虛擬基類,我嘗試使第一類成為第二類的父類,但出現了很多錯誤。

編輯 -謝謝大家的答復。 我應該提到的一件事是,我無法修改虛擬基類,因此僅將代碼添加到基類將無法正常工作。

說, A是基類,而BC是從基類繼承的類。 BC之間共享邏輯的方法稱為SomeMethod 無論使用哪種情況,以下方法之一都可以解決問題:

  • B::SomeMethodC::SomeMethod的邏輯復制並粘貼到A::SomeMethod
  • 創建一個類D ,該類提供SomeMethod的共享版本,並從D派生BC ,后者從A派生
  • 創建一個只提供所需實現的類SomeMethodImpl ,然后B::SomeMethodC::SomeMethod將方法調用委托給SomeMethodImpl::SomeMethod的私有實例

如果要將基類保留為純虛類,請創建從該類繼承的另一類並實現該功能,然后讓您的其他兩個類從該類繼承:

class Base { public: virtual void TheFunction(); /* blah blah other virtual functions */ };
class OneFunctionImplemented : public Base { public: virtual void TheFunction() { DoSomething(); } };
class ChildClass1 : public OneFunctionImplemented { };
class ChildClass2 : public OneFunctionImplemented { };

將共享功能放在基類中。 其他兩個類都可以從那里訪問它。

我相信虛擬基類是指具有純虛函數( 抽象類)並且實際上不是從基類派生的基類。 在這種情況下,可以將通用實現放在此基類中,以便所有派生類都可以使用它。

暫無
暫無

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

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