我有一個虛擬基類和兩個實現各種方法的類。這兩個類對於其中一種方法具有相同的功能。有沒有我可以分享兩個類之間的實現來消除多餘的代碼?除了虛擬基類以外,我還嘗試將第一個類作爲第二個類的父類,但得到了一堆錯誤。在C++中的虛擬基類的兩個實現之間共享方法
編輯 - 謝謝大家的回覆。我應該提到的一件事是,我不能修改虛擬基類,因此只需將代碼添加到基類就行不通。
我有一個虛擬基類和兩個實現各種方法的類。這兩個類對於其中一種方法具有相同的功能。有沒有我可以分享兩個類之間的實現來消除多餘的代碼?除了虛擬基類以外,我還嘗試將第一個類作爲第二個類的父類,但得到了一堆錯誤。在C++中的虛擬基類的兩個實現之間共享方法
編輯 - 謝謝大家的回覆。我應該提到的一件事是,我不能修改虛擬基類,因此只需將代碼添加到基類就行不通。
說,A
是基類,而B
和C
是繼承自基類的類。其邏輯在B
和C
之間共享的方法稱爲SomeMethod
。下列情況之一的應做的伎倆,不管你用例:
B::SomeMethod
和C::SomeMethod
和複製並粘貼到A::SomeMethod
D
提供的共享版本SomeMethod
並有B
和C
從D
派生,將從A
SomeMethodImpl
,只是提供你想要的執行,再B::SomeMethod
和01的落實將只是委託方法調用的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 { };
你是什麼意思的虛擬基地即抽象類或虛擬繼承自其他類? – Ashish 2009-11-24 05:56:19
一切都用虛擬methodname()= 0; – blcArmadillo 2009-11-24 06:09:35
@blcArmadillo:它是一個* abstract *基類,不是虛擬基類。虛擬基類在C++中的含義完全不同 – Naveen 2009-11-24 06:15:03