繼承和派生概述:
繼承和派生是同乙個過程從不同角的度看
保持已有類的特性而構造新類的過程稱為繼承。
在已有類的基礎上新增自己的特性而產生新類的過程稱為派生。
被繼承的已有類稱為基類(或父類)。
派生出的新類稱為派生類(或子類)。
直接參與派生出某類的基類稱為直接基類。
基類的基類甚至更高層的基類稱為間接基類。
派生的目的
當新的問題出現,原有程式無法解決(或不能完全解決)時,需要對原有程式進行改造。
派生類的構成:
吸收基類成員
改造基類成員
新增新的成員
吸收基類成員:
預設情況下派生類包含了全部基類中除構造和析構函式之外的所有成員。
c++11規定可以用using語句繼承基類建構函式。
改造基類成員:
如果派生類宣告乙個和某基類成員同名的新成員,派生的新成員就隱藏或覆蓋了外層同名成員。
新增新的成員:
派生類增加新成員使派生類在功能上有所發展。
繼承方式
不同繼承方式的影響主要體現在:
派生類成員對基類成員的訪問許可權;
通過派生類物件對基類成員的訪問許可權。
三種繼承方式:
公有繼承
私有繼承
保護繼承
公有繼承(public):
繼承的訪問控制
基類的public和protected成員:訪問屬性在派生類中保持不變;
基類的private成員:不可直接訪問。
訪問許可權
派生類中的成員函式:可以直接訪問基類中的public和protected成員,但不能直接訪問基類的private成員;
通過派生類的物件:只能訪問public成員。
舉例:定義乙個點類(point)
定義乙個矩形類(rectangle)
私有繼承(private)
繼承的訪問控制:
基類的public和protected成員:都以private身份出現在派生類中;
基類的private成員:不可直接訪問。
訪問許可權:
派生類中的成員函式:可以直接訪問基類中的public和protected成員,但不能直接訪問基類的private成員;
通過派生類的物件:不能直接訪問從基類繼承的任何成員。
舉例
保護繼承(protected)
繼承的訪問控制
基類的public和protected成員:都以protected身份出現在派生類中
基類的private成員:不可直接訪問。
訪問許可權
派生類中的成員函式:可以直接訪問基類中的public和protected成員,但不能直接訪問基類的private成員;
通過派生類的物件:不能直接訪問從基類繼承的任何成員。
protected成員的特點與作用
對建立所在類物件的模組來說,它與private成員的性質相同。
對於其派生類來說,它與public成員的性質相同。
既實現了資料隱藏,有方便繼承,實現**重用。
多繼承舉例
//公有繼承 物件訪問 成員訪問
public --> public y y
protected --> protected n y
private --> private n n
//保護繼承 物件訪問 成員訪問
public --> protected n y
protected --> protected n y
private --> private n n
//私有繼承 物件訪問 成員訪問
public --> private n y
protected --> private n y
C 繼承關係
繼承關係的 演示 class person public person string name,string int age,double weight public void eat double food class student person public void study double...
C 菱形繼承關係
1 菱形繼承是什麼 答 乙個派生類有多個基類,多個基類又由同乙個類派生 2 菱形繼承有什麼問題 答 會讓高層的基類在底層的派生類中擁有多份成員,造成不合理 3 菱形繼承如何解決 答 利用虛繼承解決,在虛繼承中會在本來和儲存虛基類的地方儲存vbptr,如果乙個類中有重複的虛基類,就會讓多個vbptr指...
C 的繼承關係
建立名為vehicle 車 的基類,它含有製造商的名稱 string型別 發動機缸數 int 型別 以及車主 person型別 然後建立vehicle類的乙個派生類truck 卡車 它具有一些附加屬性,包括載重 double型別 單位 噸 和牽引力 int型別 單位 磅 類應具有合理的建構函式 取值...