一 不同的繼承方式會改變繼承成員的訪問屬性
public 修飾的成員變數、方法 在類的內部和外部都可以使用。
protected 修飾的成員變數、方法在類的內部使用,在繼承的子類中使用,類的外部不能使用。(是為了在家族中使用,為了得到繼承!)
private 修飾的成員變數、方法 只能在類的內部使用,不能在類的外部使用
1)c++中的繼承方式會影響子類的對外訪問屬性
public繼承:父類成員在子類中保持原有訪問級別
private繼承:父類成員在子類中變為private成員
protected繼承:父類中public成員會變成protected
父類中protected成員仍然為protected
父類中private成員仍然為private
2)private成員在子類中依然存在,但是卻無法訪問到。不論種方式繼承基類,派生類都不能直接使用基類的私有成員。
3)c++中子類對外訪問屬性表
父類成員訪問級別繼承
方式public(繼承方式)
proteced(繼承方式)
private(繼承方式)
public
public
proteced
private
proteced
proteced
proteced
private
private
private
private
private
三看原則:
c++中的繼承方式(public、private、protected)會影響子類的對外訪問屬性
判斷某一句話,能否被訪問
1)看呼叫語句,這句話寫在子類的內部、外部
2)看子類如何從父類繼承(public、private、protected)
3)看父類中的訪問級別(public、private、protected)
思考:如何恰當的使用public,protected和private為成員宣告訪問級別?
1、需要被外界訪問的成員直接設定為public
2、只能在當前類中訪問的成員設定為private
3、只能在當前類和子類中訪問的成員設定為protected,protected成員的訪問許可權介於public和private之間。
型別相容規則是指在需要基類物件的任何地方,都可以使用公有派生類的物件來替代。通過公有繼承,派生類得到了基類中除建構函式、析構函式之外的所有成員。這樣,公有派生類實際就具備了基類的所有功能,凡是基類能解決的問題,公有派生類都可以解決。型別相容規則中所指的替代包括以下情況:
子類物件可以當作父類物件使用
子類物件可以直接賦值給父類物件
子類物件可以直接初始化父類物件
父類指標可以直接指向子類物件
父類引用可以直接引用子類物件
在替代之後,派生類物件就可以作為基類的物件使用,但是只能使用從基類繼承的成員。
型別相容規則是多型性的重要基礎之一。
第一層含義:
1-1 基類指標(引用)指向子類物件
parent *p = null;
p = &c1;
p->printp();
1-2 指標做函式引數
howtoprint(&p1);
howtoprint(&c1);
1-3引用做函式引數
howtoprint2(p1);
howtoprint2(c1);
第二層含義
可以讓父類物件,初始化子類物件
parent p3 = c1;
三 繼承中的物件模型
問題:如何初始化父類成員?父類與子類的建構函式有什麼關係
在子類物件構造時,需要呼叫父類建構函式對其繼承得來的成員進行初始化
在子類物件析構時,需要呼叫父類析構函式對其繼承得來的成員進行清理
1、子類物件在建立時會首先呼叫父類的建構函式
2、父類建構函式執行結束後,執行子類的建構函式
3、當父類的建構函式有引數時,需要在子類的初始化列表中顯示呼叫
4、析構函式呼叫的先後順序與建構函式相反
c 複習要點總結之九 繼承二
一 繼承中的同名成員變數處理方法 1 當子類成員變數與父類成員變數同名時 2 子類依然從父類繼承同名成員 3 在子類中通過作用域分辨符 進行同名成員區分 在派生類中使用基類的同名成員,顯式地使用類名限定符 4 同名成員儲存在記憶體中的不同位置 繼承和static關鍵字在一起會產生什麼現象哪?理論知識...
c 複習要點總結z之十二 STL string
1string概念 string是stl的字串型別,通常用來表示字串。而在使用string之前,字串通常是用char 表示的。string與char 都可以用來表示字串,那麼二者有什麼區別呢。string和char 的比較 string是乙個類,char 是乙個指向字元的指標。string封裝了ch...
C 複習要點總結之 友元
在c 中,類的成員訪問許可權有三種,private,protected,public。private 類中的private成員只能夠在本類中或者友元訪問,子類或外界無法訪問私有成員。protected 類中的protected成員只允許本類或者子類中訪問,外界無法訪問,定義類時如果希望成員被子類繼承...