[英]Sharing methods between two implementations of a virtual base class in C++
我有一個虛擬基類和兩個實現各種方法的類。 對於這兩種方法之一,這兩個類具有相同的功能。 我可以在兩個類之間共享實現以消除冗余代碼嗎? 除了虛擬基類,我嘗試使第一類成為第二類的父類,但出現了很多錯誤。
編輯 -謝謝大家的答復。 我應該提到的一件事是,我無法修改虛擬基類,因此僅將代碼添加到基類將無法正常工作。
說, A
是基類,而B
和C
是從基類繼承的類。 在B
和C
之間共享邏輯的方法稱為SomeMethod
。 無論使用哪種情況,以下方法之一都可以解決問題:
B::SomeMethod
和C::SomeMethod
的邏輯復制並粘貼到A::SomeMethod
D
,該類提供SomeMethod
的共享版本,並從D
派生B
和C
,后者從A
派生 SomeMethodImpl
,然后B::SomeMethod
和C::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.