2012-02-14 42 views
0

我手邊有以下問題。有一個類,Foo和另一個稱爲Bar,它是類Foo的成員。繼承基類的一部分

class Bar{ 
private: 
    some stuff; 
public: 
    Bar(); 
    some other_stuff; 
}; 
class Foo{ 
private: 
    Bar bar; 
public: 
    Foo(); // Initialize the bar object here in the constructor 
    void doSomethingWithBar(); 
}; 

現在這兩個類都很大!對於某些應用程序,我需要對FooBar進行更改,因此有Foo_DerivedBar_Derived類。

class Bar_Derived: public Bar{ 
private: 
    some NEW_stuff; 
public: 
    Bar_Derived(); 
    some New_other_stuff; 
}; 
class Foo_Derived: public Foo{ 
private: 
    Bar_Derived bar; 
public: 
    Foo_Derived(); 
    void doSomethingWithBar(); 
}; 

據我瞭解繼承,一旦Foo_Derived()被調用時,富基類構造函數也被稱爲它初始化基類(Bar型的酒吧對象。我應該怎麼做了吧(類型Bar_Derived)我只需要基類(Foo)來初始化條形對象的基礎部分,並在Foo_Derived類中自己完成其餘部分,這是否可能呢?

很抱歉,如果問題不清楚,我只是很困惑我自己!

+0

不可能繼承類的一部分。 – 2012-02-14 04:00:44

回答

0

基類初始化程序只會初始化對象的基本部分,因爲這是它所知道的。類初始化程序只應初始化那些始終需要爲該類的所有成員初始化的內容。

Foo_Derived的構造函數中,可以使用初始化程序列表指定要調用哪個Bar_Derived構造函數。 Bar_Derived構造函數可以使用它所希望的任何Bar構造函數。如果您沒有構建Foo_Derived::barBar_Derived構造函數,您應該編寫一個或重新考慮如何設置您的層次結構。

+0

謝謝。我希望我能避免這種情況。最簡單的解決方法是將新東西添加到Bar_base中,但這些不屬於並且是錯誤的,因爲Foo對新東西一無所知;只有Foo_derived沒有。我認爲修復它的另一種方法是讓Foo和Bar成爲Foo_derived和Bar_derived(不再由Foo或Bar派生)的成員,這樣我可以製作「包裝器」,直接調用基礎中的相應函數在需要時添加一些新的東西。 – GradGuy 2012-02-14 04:16:53