C++進階--公有繼承的二元性
阿新 • • 發佈:2018-12-26
tin 保護 中繼 增加 pub 鼓勵 phi nco 關註
//########################################################################### /* * 公有繼承的兩元性 * * - 接口的繼承 * - 實現的繼承 */ class Dog { public: virtual void bark() = 0; //只繼承了接口 void run() { cout << "I am running."; } //既繼承了接口,也繼承了實現 virtual void eat() { cout << "I am eating. "; } protected: void sleep() { cout << " I am sleeping. "; } //只繼承了實現,沒繼承接口 }; class Yellowdog : public Dog{ public: virtual void bark() { cout << "I am a yellow dog.\n";} void iSleep() { sleep(); } }; /* * C++中繼承的類型: * 1. 純虛公有函數 - 只繼承接口 * 2. 非虛公有函數 - 繼承接口和實現 * 3. 非純虛公有函數 - 繼承接口和默認實現 * 4. 保護函數 - 只繼承實現 * * 作為程序設計師,有必要分清接口和實現的概念 */ /* * 接口繼承用於 * * 1. Subtyping * 2. Polymorphism */ virtual void bark() = 0; /* * 陷阱: * -- 小心接口膨脹 * -- 接口不應該顯示實現 */ /* * 實現繼承 * - 會增加代碼的復雜性 //在寫派生類的時候需要關註基類,在改基類的時候的還要時刻小心有沒有破壞派生類 * - 不鼓勵Not encouraged */ public: void run() { cout << "I am running."; } virtual void eat() { cout << "I am eating. "; } protected: void sleep() { cout << " I am sleeping. "; } /* * 實現繼承的指導原則: * 1. 不要為了代碼重用而使用繼承,使用組合替代 * 2. 最小化基類的實現,基類要小巧 * 3. 最小化實現繼承的層數 */ /* * 繼承是否是魔鬼 ??? * * 繼承有時候有用,但是往往過度使用了 */
C++進階--公有繼承的二元性