2009-11-24 42 views
0

我有一個虛擬基類和兩個實現各種方法的類。這兩個類對於其中一種方法具有相同的功能。有沒有我可以分享兩個類之間的實現來消除多餘的代碼?除了虛擬基類以外,我還嘗試將第一個類作爲第二個類的父類,但得到了一堆錯誤。在C++中的虛擬基類的兩個實現之間共享方法

編輯 - 謝謝大家的回覆。我應該提到的一件事是,我不能修改虛擬基類,因此只需將代碼添加到基類就行不通。

+0

你是什麼意思的虛擬基地即抽象類或虛擬繼承自其他類? – Ashish 2009-11-24 05:56:19

+0

一切都用虛擬methodname()= 0; – blcArmadillo 2009-11-24 06:09:35

+0

@blcArmadillo:它是一個* abstract *基類,不是虛擬基類。虛擬基類在C++中的含義完全不同 – Naveen 2009-11-24 06:15:03

回答

4

說,A是基類,而BC是繼承自基類的類。其邏輯在BC之間共享的方法稱爲SomeMethod。下列情況之一的應做的伎倆,不管你用例:

  • 就拿邏輯B::SomeMethodC::SomeMethod和複製並粘貼到A::SomeMethod
  • 創建一個類D提供的共享版本SomeMethod並有BCD派生,將從A
  • 派生創建一個類SomeMethodImpl,只是提供你想要的執行,再B::SomeMethod和01的落實將只是委託方法調用的SomeMethodImpl::SomeMethod
1

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

0

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

2

私人例如,如果你要保持你的基類純虛,創建另一個類,從這個繼承並實現一個功能,然後讓你的兩個其他類繼承這一個:

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 { }; 
相關問題