物件導向筆記 多個類

2021-10-06 11:05:49 字數 3026 閱讀 6458

基類與派生類

派生類的定義

派生類的成員列表描述的是派生類自己新增加的資料成員和成員函式

注意:

派生類的設計

類成員的訪問

派生類新增的成員訪問基類的類成員

類使用者訪問派生類的成員

類使用者訪問派生類的基類成員

無論採用何種繼承方式得到的派生類,派生類成員及其友元都不能訪問基類的私有成員,派生類外部的使用者只能訪問公有屬性的成員

保護繼承和私有繼承中的屬性變化意味著在派生類的派生類中,部分繼承到的資源訪問收到進一步限制。

賦值相容規則:賦值相容規則是指在需要基類物件的任何地方,都可以使用公有派生類的物件來替代

注意

多重繼承派生類

classd:

public b,

public c

;

二義性問題

classa}

;class

bvoid

gun()}

;classc:

public a,

public b

//重寫gun()

void

hun(

)//出現二義性};

使用成員名限定可以消除二義性,例如:

c.a::

fun();

c.b::

fun();

p->a::

fun();

p->b::

fun(

);

重複繼承問題

class 派生類名:

virtual 訪問標號 虛基類名,..

.;

需要注意,為類保證虛基類在派生類中只繼承一次,應當在該基類的所有直接派生類中宣告為虛基類。否則仍然會出現對基類的多次繼承

#include

using

namespace std;

class

a//宣告為基類a

void

fun(

)private

:int nv;

//私有資料成員};

classb1:

virtual

public a //宣告a為虛基類

//b1類的建構函式

private

:int nv1;};

classb2:

virtual

public a //宣告a為虛基類

;private

:int nv2;};

classc:

public b1,

public b2

void

fund()

private

:int bvd;};

intmain()

注意:

多型性概念:

包含多型(繼承及虛函式)

強制多型(強制型別轉換)

同時,可以在表示式中使用3種強制型別轉換表示式:

型別引數化多型(模板)

包含多型

#include

using

namespace std;

class

point

//建構函式

double

area()

//計算面積};

class

circle

:public point

double

area()

//計算面積};

intmain()

執行結果:

point area =

0 circle area =

3.14

circle area =

0//pc指標是point類,因為是靜態聯編,所以pc->area()呼叫的是基類的area()函式 編譯的時候將基類函式和基類的指標和引用繫結在一起

circle area =

0

動態聯編舉例:

#include

using

namespace std;

class

point

//建構函式

virtual

double

area()

//虛函式};

class

circle

:public point

double

area()

//虛函式};

intmain()

執行結果:

point area =

0 circle area =

3.14

circle area =

0 circle area =

3.14

使用虛函式並不一定產生多型性,也不一定使用動態聯編。例如,在呼叫中對虛函式使用成員名限定,可以強制c++對該函式的呼叫使用靜態聯編

虛函式實現多型的條件

類之間的繼承關係滿足賦值相容性規則(賦值相容規則僅針對公有繼承)

改寫了同名的虛函式

根據賦值相容性規則使用指標(或引用)

類成員函式的指標與多型性

何時需要虛函式

虛析構函式

例如:

point *pp =

new circle;

//基類指標指向派生類

delete pp;

//僅執行基類析構函式

如果希望「deletepp」執行circle的析構函式,那麼基類point的析構函式要宣告為虛函式,稱為虛析構函式。

如果將基類的析構函式宣告為虛函式,由該基類所派生的所有派生類的析構函式也都自動成為虛函式,即使派生類的析構函式與基類的析構函式名字不同

當基類的析構函式為虛函式時,無論指標指的是同一類族中的哪乙個類物件,系統總會採用動態聯編,呼叫正確的析構函式,對該物件進行清理

純虛函式和抽象類

python 筆記4 類(物件導向?)

1 定義 init 為建構函式 其中 metaclass type 確定使用新式類,python3.0 以後就不用考慮新式類的問題,類的定義 顯然在類的定義中每乙個函式引數列表的第乙個都應該是self,self 也就是物件本身,而 self 也是區分方法和物件函式的標誌。2 訪問許可權 通過上面的案...

物件導向類

1.類和例項 類是抽象的模板,比如student類,而例項是根據類建立出來的乙個個具體的 物件 每個物件都擁有相同的方法,但各自的資料可能不同。記憶體位址 給例項繫結屬性 由於類可以起到模板的作用,因此,可以在建立例項的時候,把一些我們認為必須繫結的屬性強制填寫進去 2.資料封裝 就是在類裡面定義方...

物件導向類

類的宣告 functiona es6 class a2 生成例項 newa newa2 如何繼承 借助建構函式繼承 functionp p.prototype.say function 父類的原型物件無法被子類繼承 functionc 借助原型鏈繼承 functionp functionc c.pr...