三、類的繼承(派生)
C++?中的繼承是類與類之間的關系,是一個很簡單很直觀的概念,與現(xiàn)實世界中的繼承類似,例如兒子繼承父親的財產。
繼承(Inheritance)可以理解為一個類繼承另一個類成員變量和成員函數(shù)的過程。例如類 B 繼承于類 A,那么 B 就擁有 A 的成員變量和成員函數(shù)。
在C++中,派生(Derive)和繼承是一個概念,只是站的角度不同。繼承是兒子接收父親的產業(yè),派生是父親把產業(yè)傳承給兒子。
被繼承的類稱為父類或基類,繼承的類稱為子類或派生類?!白宇悺焙汀案割悺蓖ǔ7旁谝黄鸱Q呼,“基類”和“派生類”通常放在一起稱呼。
派生類除了擁有基類的成員,還可以定義自己的新成員,以增強類的功能。
語法
class 派生類名:[繼承方式] 基類名{
??? 派生類新增加的成員
};
繼承方式:public、protected、private
一.繼承方式與基類成員在派生類中的訪問權限
1.public繼承方式
基類中所有 public 成員在派生類中為 public 屬性;
基類中所有 protected 成員在派生類中為 protected 屬性;
基類中所有 private 成員在派生類中不可見(不能使用)。
2.protected繼承方式
基類中的所有 public 成員在派生類中為 protected 屬性;
基類中的所有 protected 成員在派生類中為 protected 屬性;
基類中的所有 private 成員在派生類中不可見(不能使用)。
3.private繼承方式
基類中的所有 public 成員在派生類中均為 private 屬性;
基類中的所有 protected 成員在派生類中均為 private 屬性;
基類中的所有 private 成員在派生類中不可見(不能使用)。
派生的兩種典型場景
1.?當你創(chuàng)建的新類與現(xiàn)有的類相似,只是多出若干成員變量或成員函數(shù)時,可以使用繼承,這樣不但會減少代碼量,而且新類會擁有基類的所有功能。
2.當你需要創(chuàng)建多個類,它們擁有很多相似的成員變量或成員函數(shù)時,也可以使用繼承??梢詫⑦@些類的共同成員提取出來,定義為基類,然后從基類繼承,既可以節(jié)省代碼,也方便后續(xù)修改成員。
二.繼承時遮蔽基類成員問題
如果派生類中的成員(包括成員變量和成員函數(shù))和基類中的成員重名,那么就會遮蔽從基類繼承過來的成員。所謂遮蔽,就是在派生類中使用該成員(包括在定義派生類時訪問基類成員,也包括通過派生類對象訪問該成員)時,實際上使用的是派生類新增的成員,而不是從基類繼承來的。

三.派生類的構造函數(shù)
類的構造函數(shù)不能被繼承。構造函數(shù)不能被繼承是有道理的,因為即使繼承了,它的名字和派生類的名字也不一樣,不能成為派生類的構造函數(shù),當然更不能成為普通的成員函數(shù)。
在設計派生類時,對繼承過來的成員變量的初始化工作也要由派生類的構造函數(shù)完成,但是大部分基類都有 private 屬性的成員變量,它們在派生類中無法訪問,更不能使用派生類的構造函數(shù)來初始化。
這種矛盾在C++繼承中是普遍存在的,解決這個問題的思路是:在派生類的構造函數(shù)中調用基類的構造函數(shù)。
無論派生類有沒有自己的構造函數(shù),在創(chuàng)建派生類的對象時必須調用基類的構造函數(shù)。