is-a關係從字面上理解是乙個從屬派生關係,舉個例子就是:「學生是人」,但這句話反過來則不成立,
void error(const std::string& msg);//報錯函式定義於另外某處
class penguin:public bird
......
};
在c++中,public繼承必須滿足is-a關係,如果子類b和父類a滿足is-a關係,則a物件能夠排上用場的地方,b物件一定可以用,父類表現的是一般化的形式,而子類表示的是特殊化的概念。
注意事項1:
好的介面可以防止無效的**通過編譯,例如:鳥都可以飛,企鵝是鳥,但是企鵝不會飛,這看似違反了is-a關係,其實,這個和語言表達方式有關,當我們說鳥會飛的時候,意思是表達一部分鳥會飛,而不是說所有的鳥都會飛,因此,再設計繼承關係是就要注意這點,基類鳥中不應該含有飛函式,會飛的鳥和不會飛的鳥分別繼承鳥類,在會飛的鳥中實現飛函式,在不會飛的類中不用實現飛函式。具體如下所示:
針對上述問題的另外乙個解決方法是是企鵝類繼承鳥類,並且實現飛函式,但是,函式體內會報錯資訊,這樣當該函式被呼叫時就會報錯,這是符合正常邏輯的。
class bird;
class flybird:public bird;
class penguin:public bird;
summary:
public繼承意味著is-a。適用於base classes身上的每一件事情一定適用於derived classes身上,因為每乙個derived物件也都是base class物件。
繼承 is a關係
派生類和基類之間的特殊關係式基於c 繼承的底層模型的。實際上,c 有3個繼承方式 公用繼承 保護繼承和私有繼承。公有繼承是最常見的方式,他建立一種is a關係,即派生類物件也是乙個基類物件,可以對基類物件執行的任何操作,也可以對派生類物件執行。例如,假設有乙個fruit類,可以不吃水果的重量和熱量。...
繼承 is a關係
c 有3種繼承方式 公有繼承 保護繼承 私有繼承。公有繼承是最常用的方式,它建立一種is a關係,即派生類物件也是乙個基類物件,可以對基類物件執行的任何操作,也可以對派生類物件執行。如果希望同乙個方法在派生類和基類中的行為是不同的,也就是說,方法的行為應取決於呼叫該方法的物件。這種較複雜的行為成為多...
Is a 和Has a之間關係
is a 和has a之間關係 可以這樣理解 汽車是一種交通工具 汽車 is a 交通工具 汽車有乙個發動機 汽車 has a 發動機 is a 一般是繼承關係 has a 一般是組合關係 或者這樣理解 has a 關係即組合關係,通過定義類的屬性的方式實現的 is a 關係即繼承關係,通過類繼承實...