CPP 封裝 繼承

2021-09-08 14:14:13 字數 1418 閱讀 4070

類的三方法:封裝,繼承,多型。

封裝:使用一整套方法去建立乙個新的型別,這叫類的封裝。

繼承:從乙個現有的型別基礎上,稍作改動,得到乙個新的型別的方法,叫類的繼承。

多型:當有幾個不同的子類物件時,物件呼叫的函式會依據物件型別來呼叫相應型別的成員函式。

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...