在上一章中,我們討論了物件組合,其中複雜類是從更簡單的類和型別構造的。物件組合非常適合構建與其部件具有「has-a」關係的新物件。但是,物件組合只是c ++允許您構造複雜類的兩種主要方式之一。第二種方式是通過繼承,它模擬兩個物件之間的「is-a」關係。
與通過組合和連線其他物件來建立新物件的物件組合不同,繼承涉及通過直接獲取其他物件的屬性和行為然後擴充套件或特化它們來建立新物件。就像物件組合一樣,繼承在現實生活中無處不在。當你被懷孕時,你繼承了你父母的基因,並從他們兩個中獲得了身體屬性 - 但是你在自己身上新增了自己的個性。技術產品(計算機,手機等)繼承了其前輩的功能(通常用於向後相容)。例如,英特爾奔騰處理器繼承了英特爾486處理器定義的許多功能,後者本身繼承了早期處理器的功能。c ++繼承了c語言的許多特性,c語言所基於的語言,
考慮蘋果和香蕉。雖然蘋果和香蕉是不同的水果,但兩者的共同點都是水果。而且因為蘋果和香蕉都是水果,簡單的邏輯告訴我們,任何與水果相關的屬性都適用於蘋果和香蕉。例如,所有水果都有名稱,顏色和大小。因此,蘋果和香蕉也有名稱,顏色和大小。我們可以說蘋果和香蕉繼承(獲得)這些水果的所有特性,因為它們是水果。我們也知道果實經過成熟過程,可以通過它來食用。因為蘋果和香蕉都是水果,我們也知道蘋果和香蕉會繼承成熟的行為。
放入圖表中,蘋果,香蕉和水果之間的關係可能如下所示:
此圖定義了層次結構。
層次結構
層次結構是顯示各種物件如何相關的圖表。大多數等級要麼顯示隨著時間的推移(386 - > 486 - >奔騰),要麼以從一般到特定(水果 - >蘋果 - >紅色美味)的方式對事物進行分類。排序都會定義乙個等級(從一般到特定)。
這是層次結構的另乙個例子:正方形是乙個矩形,它是乙個四邊形,是乙個形狀。直角三角形是三角形,也是乙個形狀。放入層次結構圖,看起來像這樣:
此圖從一般(頂部)到特定(底部),層次結構中的每個專案都繼承了其父專案的屬性和行為。
展望未來
在本章中,我們將**繼承如何在c ++中工作的基礎知識。
下一章,我們將**繼承如何通過虛函式實現多型(物件導向程式設計的大流行語之一)。
隨著我們的進步,我們還將討論繼承的主要優點,以及一些缺點。
C 基礎教程物件導向(學習筆記5(2))
在編寫具有多個建構函式的類 大多數建構函式 時,必須為每個建構函式中的所有成員指定預設值會導致冗餘 如果更新成員的預設值,則需要觸控每個建構函式。從c 11開始,可以直接為普通類成員變數 不使用static關鍵字的變數 提供預設初始化值 class rectangle void print int ...
C 基礎教程物件導向(學習筆記(23))
過載一元運算子 與您目前看到的運算子不同,正 負 和邏輯非 運算子都是一元運算子,這意味著它們只能在乙個運算元上執行。因為它們僅對它們所應用的物件進行操作,所以通常將一元運算子過載實現為成員函式。所有三個運算元都以相同的方式實現。讓我們看一下我們如何在前面的例子中使用的cents類上實現operat...
C 基礎教程物件導向(學習筆記(24))
過載比較運算子相對簡單,因為它們遵循我們在過載其他運算子時看到的相同模式。因為比較運算子都是不修改左運算元的二元運算子,所以我們將使過載的比較運算子宣告為友元函式。這是乙個帶有過載運算子 和operator!的car類的示例。include include class car friend bool...