類的三方法:封裝,繼承,多型。
封裝:使用一整套方法去建立乙個新的型別,這叫類的封裝。
繼承:從乙個現有的型別基礎上,稍作改動,得到乙個新的型別的方法,叫類的繼承。
多型:當有幾個不同的子類物件時,物件呼叫的函式會依據物件型別來呼叫相應型別的成員函式。
1. 繼承的主要目的是為了**復用。
建立子類物件時,先建立父類,再建立子類。
析構時,先析構子類,再析構父類。
2. 訪問許可權:public, protected, private.
protected表示這種成員可以被子類繼承和訪問,但是外界卻像private一樣不可訪問。
父類的private成員並不是不繼承,而是對子類擴充套件的成員函式不可見。
public派生規則:
父類成員訪問許可權 子類繼承自父類成員的訪問限定
public public
protected protected
private 不可見
protected派生規則:
父類成員訪問許可權 子類繼承自父類成員的訪問限定
public protected
protected protected
private 不可見
private派生規則:
父類成員訪問許可權 子類繼承自父類成員的訪問限定
public private
protected private
private 不可見
3. 型別轉換
父類a子類b
a *p = new b; 可以
b *p = new a; 不可以
p呼叫的成員方法為父類(a)的方法,非子類b的成員方法。屬編譯時繫結(因p的指標型別為a *),如要訪問子類,需要使用多型(父類相應方法定義為virtual)。
a a;
b *p;
p = &a; 可以
p訪問成員變數時可能越界(因p的成員變數多餘a)
宣告為vitual的成員函式稱為虛函式。
有虛函式的類都有乙個隱含的指標成員vptr,指向乙個虛函式表。(乙個類乙個)
每個父類或子類都各自有一張虛函式表。在構造物件時,物件的vptr成員指向該類的虛函式表。
包含虛函式的類的sizeof應多加4個位元組,用於存放vptr(虛函式表指標)。
一旦某個函式在父類中宣告為virtual,在所有繼承它的子類中這個函式也是virtual的,子類可以不必寫virtual關鍵字。
宣告為virtual的函式,在執行時確定執行體,屬動態繫結,dynamic binding。呼叫子類的具體實現。
如果乙個成員函式宣告為virtual並在末尾加上=0而沒有提供函式的實現,稱為虛函式,擁有虛函式的類稱為抽象類,抽象類不能例項化(或者說不能建立該類的物件),而只能被其他類繼承。
抽象類也稱為介面,繼承了某個抽象類也稱實現了某個介面。
python封裝繼承 python繼承 封裝
python繼承 封裝 1 為什麼要封裝 封裝資料的主要原因是 保護隱私 封裝方法的主要原因是 隔離複雜度 2 封裝分為兩個層面 第乙個層面的封裝 什麼都不用做 建立類和物件會分別建立二者的命名空間,我們只能用類名.或者obj.的方式去訪問裡面的名字,這本身就是一種封裝 r1.nickname 草叢...
C實現 CPP的 封裝
include include c實現cpp中的 set get 方法的許可權控制 flag 0 有許可權 public flag 1 無許可權 private static int p id null 把資料隱蔽的存起來 不一定非要放在靜態區 cpp一般放在堆區。static char p nam...
Cpp的繼承Inheritance 筆記
本文參考這裡 is a關係 單繼承 class derived class access specifier base class 多繼承 class derived class access basea,access baseb.派生類,可以訪問基類中除了private外的其它成員 non pri...