C primer 十六 繼承 is a關係

2021-07-25 12:43:39 字數 879 閱讀 3519

派生類和基類之間的特殊關素是基於c++繼承的底層模型的。實際上c++有3種繼承方式:公有繼承、保護繼承和私有繼承。公有繼承是最常用的方式,它建立一種is-a關係,即派生類物件也是乙個基類物件,可以對基類物件執行的任何操作,也可以對派生類物件執行。例如,假設有乙個fruit類,可以保護水果重量和熱量。因為香蕉是一種特殊的水果,所以可以從fruit類派生出banana類。新類獎繼承原始的類的所有資料成員,因此banana物件將包含表示香蕉重暈和熱量的成員。新的banana類還新增了專門用於香香蕉的成員,這些成員通常不用於水果,例如banana institute peel index(索引)因為派生類可以新增特性,所以,將這種芳系稱為is-a-kind-of關係可能更準確,但是通常使用術語is-a。

公有繼承不能建立is-like-a關係,也就是說,它不採用明喻。所以,不應從shark類派生出lawyer類。繼承可以在基類的基礎上新增屬性,但不能刪除基類的屬性。在有些情況下,可以設計乙個包含共有特徵的類,然後以is-a或has-a 關係,在這個類的基礎上定義相關的類。

公有繼承不建立is-implemented-as-a (作為……來實現)關係。例如,可以使用陣列來實現棧,但從 array類派生出stack類適不合適的,因為棧不是陣列。例如,陣列索引不是棧的屬性。另外,可以以其他方式實現棧,如鍊表。正確的方法是,通過讓棧包含乙個私有array物件成員來隱藏陣列實現。

公有繼承不建立uses-a關係。例如,計算機可以使用雷射印表機,但從computer類派生出printeir類 (或反過來)是沒有意義的。然而,可以使用友元函式或類來處理printer物件和computer物件之間的通訊。

在c++中,完全可以使用公有繼承來建立has-a、is-implemented-as-a或uses-a關係:然而,這樣做通常會導致程式設計方面的問題。因此,還是堅持使用is-a關係吧。

繼承 is a關係

派生類和基類之間的特殊關係式基於c 繼承的底層模型的。實際上,c 有3個繼承方式 公用繼承 保護繼承和私有繼承。公有繼承是最常見的方式,他建立一種is a關係,即派生類物件也是乙個基類物件,可以對基類物件執行的任何操作,也可以對派生類物件執行。例如,假設有乙個fruit類,可以不吃水果的重量和熱量。...

繼承 is a關係

c 有3種繼承方式 公有繼承 保護繼承 私有繼承。公有繼承是最常用的方式,它建立一種is a關係,即派生類物件也是乙個基類物件,可以對基類物件執行的任何操作,也可以對派生類物件執行。如果希望同乙個方法在派生類和基類中的行為是不同的,也就是說,方法的行為應取決於呼叫該方法的物件。這種較複雜的行為成為多...

C primer 第十六章 繼承建構函式

異常處理 直接上 trycatch runtime error e pragma once include item base.hpp include handle.hpp class sales item sales item const item base item h item.clone i...