Effective C 審慎的使用多重繼承

2021-10-02 06:30:38 字數 1439 閱讀 2438

author:

class borrowableitem;

class electronicgadget;

class ***player:public borrowableitem,public electronicgadget

{};***player mp;

mp.checkout(); //編譯器會報錯,歧義

需要明確指出呼叫哪個

mp.borrowableitem::checkout();
class file{};

class inputfile:public file{};

class outputfile:public file{};

class iofile:public inputfile, public outputfile

{};

最後的iofile含有多少個file中的資料比如filename成員變數?

多個乙個

再c++中都支援。看你如何繼承。預設是有拷貝的。

class file{};

class inputfile:virtual public file{};

class outputfile:virtual public file{};

class iofile:public inputfile, public outputfile

{};

沒有拷貝只有乙份資料。

虛繼承會導致執行速度下降。

virtual bases的初始化是由它的派生類來完成的。無論派生類距離它多遠。

非必要不要使用虛繼承

如果要使用virtual

bases,盡量不要再裡面放置資料。這樣就不用擔心他們初始化時候的詭異狀況了。

class iperson;

class databaseid{};

class personinfo;

class cperson:public iperson, private personinfo

virtual std::string name() const

virtual std::string birthdate() const

private:

const char* valuedelimopen() const

const char* valuedelimclose() const

};

當你需要public繼承某個inte***ce

class和private繼承某個協助實現的class時。這種情況下你會發現多重繼承較為合理。當然其他也會有各種情況可能比較合理。這些需要你自己去考慮是否使用多重繼承。

有單一繼承的可行方案時就不要使用多重繼承。使用多重繼承的時候你需要三思.

明智而審慎的使用Private繼承

c 如何將public繼承視為is a。private繼承並意味著 is a 如果類之間的繼承關係是private。編譯器不會自動將乙個derived物件轉換成乙個base classes。這和public繼承的情況不同。由private base classes繼承而來的所有成員,在derived...

明智而審慎的使用private繼承

private繼承的兩條規則 1 編譯器不會將乙個derived class轉化為baseclass,但是卻可以顯示轉換。也就是,他們之間不是is a的關係。2 從基類繼承的所有的成員和方法都將變為private屬性。也就是,它只繼承實現,不整合介面。private繼承意味著 根據某物實現出 它和復...

條款39 明智而審慎的使用private繼承

use private inheritance judiciously.如果classes之間的繼承關係是private,編譯器不會自動將乙個derived class物件轉換為乙個base class物件。這和public繼承的情況不同。由private base class繼承而來的所有成員,在...