知識點總結 組合,繼承,多型

2021-09-24 15:19:14 字數 3348 閱讀 7921

一、組合

將乙個類的物件作為另乙個類的成員,被稱作組合或包含

1.將嵌入的物件作為新類的公有成員

class eye

};class nose

};class mouth

};class ear

};class head

};int main()

2.將嵌入物件作為新類的私有成員

class engine	

void stall(void)

...};

class car

void stop()

...

private:

engine engine;

};int main()

3.組合物件會呼叫自己的建構函式,也會在被撤銷時執行建構函式,先執行成員物件的析構函式,在執行成員物件的析構函式,建構函式的執行次序與析構函式相反。

4.復用類的實現

找到了乙個類,它提供了這個客戶程式需要的所有功能,只是介面不同,例如

#include "xcircle.h"

class circle

void draw()

double area()

double perimeter()

void scale(double factor)

private:

xcircle xc;

};

應用組合,重新包裝乙個類物件,使之用於特定的環境。

二、繼承

有類的繼承也是一種復用已有類的機制

在已基礎上繼承得到新型別,這個新型別自動擁有已有類的特性,並可以修改繼承到的特性或者增加自己的新特性

繼承:在已有類的基礎上建立新類的過程

乙個 b 類繼承a類,或稱從類 a 派生類 b

在c++中,

被繼承的已有類稱為基類;

繼承得到的新類稱為派生類;

派生類可以再被繼承,這樣構成的層次結構稱為繼承層次

類繼承關係的語法形式

class 派生類名 : 基類名錶

;基類名錶 構成

訪問控制 基類名1, 訪問控制 基類名2 ,… , 訪問控制 基類名n

訪問控制 表示派生類對基類的繼承方式,使用關鍵字:

public 公有繼承

private 私有繼承

protected 保護繼承

注意:

不論種方式繼承基類,派生類都不能直接使用基類的私有成員

派生類的生成過程經歷了三個步驟:

●吸收基類成員(全部吸收(構造、析構除外),但不一定可見)

●改造基類成員

●新增派生類新成員

(1) 吸收基類成員

在c++的繼承機制中,派生類吸收基類中除建構函式和析構函式之外的全部成員。

(2) 改造基類成員

通過在派生類中定義同名成員(包括成員函式和資料成員)來遮蔽(隱藏)在派生類中不起作用的部分基類成員。

(3) 新增新成員

僅僅繼承基類的成員是不夠的,需要在派生類中新增新成員,以保證派生類自身特殊屬性和行為的實現。

重名成員

派生類定義了與基類同名的成員,在派生類中訪問同名成員時遮蔽(hide)了基類的同名成員

在派生類中使用基類的同名成員,顯式地使用類名限定符:

類名 :: 成員

派生類建構函式的定義

在c++中,派生類建構函式的一般格式為:

派生類::派生類名(引數總表):基類名(參數列)

注意:這是基類有建構函式且含有引數時使用

派生類析構函式

(1)當派生類中不含物件成員時

●在建立派生類物件時,建構函式的執行順序是:基類的建構函式→派生類的建構函式;

●在撤消派生類物件時,析構函式的執行順序是:派生類的析構函式→基類的析構函式。

(2)當派生類中含有物件成員時

●在定義派生類物件時,建構函式的執行順序:基類的建構函式→物件成員的建構函式→派生類的建構函式;

●在撤消派生類物件時,析構函式的執行順序:派生類的析構函式→物件成員的析構函式→基類的析構函式。

三、多型

多型性(polymorphism)是指乙個名字,多種語義;或介面相同,多種實現。

過載函式是多型性的一種簡單形式。

虛函式允許函式呼叫與函式體的聯絡在執行時才進行,稱為動態聯編。

虛函式和動態聯編

冠以關鍵字virtual的成員函式稱為虛函式

實現執行時多型的關鍵首先是要說明虛函式,另外,必須用

基類指標呼叫派生類的不同實現版本

注意:

乙個虛函式,在派生類層介面相同的過載函式都保持虛特性

虛函式必須是類的成員函式

虛函式可以是另乙個類的友元

析構函式可以是虛函式,但建構函式不能是虛函式

虛函式的過載特性

在派生類中過載基類的虛函式要求函式名、返回型別、引數個數、

引數型別和順序完全相同

如果僅僅返回型別不同,c++認為是錯誤過載

如果函式原型不同,僅函式名相同,丟失虛特性

說明:

1.派生類應該從它的基類公有派生。

2.必須首先在基類中定義虛函式。

3.派生類對基類中宣告虛函式重新定義時,關鍵字virtual可以不寫。

4.一般通過基類指標訪問虛函式時才能體現多型性。

5.乙個虛函式無論被繼承多少次,保持其虛函式特性。

6.虛函式必須是其所在類的成員函式,而不能是友元函式,也不能是靜態函式。

7.建構函式、內聯成員函式、靜態成員函式不能是虛函式。

(虛函式不能以內聯的方式進行處理)

8.析構函式可以是虛函式,通常宣告為虛函式。

純虛函式和抽象類

純虛函式是一種特殊的虛函式,在許多情況下,在基類中不能對虛函式給出有意義的實現,而把它宣告為純虛函式,它的實現留給該基類的派生類去做。這就是純虛函式的作用。

純虛函式是乙個在基類中說明的虛函式,在基類中沒有定義, 要求任何派生類都定義自己的版本

純虛函式為各派生類提供乙個公共介面

純虛函式說明形式:

virtual 型別 函式名(參數列)= 0 ;

乙個具有純虛函式的基類稱為抽象類。

過載繼承多型知識點總結

stl stl容器的操作 size 返回當前容器的元素數量 empty 判斷容器是否為空 make size 返回容器能容納的最大元素數量 begin 返回乙個迭代器,指向第乙個元素 end 返回乙個迭代器,指向最後乙個元素之後 rbegin 返回乙個逆向迭代器,指向逆向遍歷的第乙個元素 rend ...

繼承知識點總結

一 繼承的定義 1.繼承是物件導向的主要特徵 此外還有封裝和多型 之一,它使得乙個類可以從現有類中派生,而不必重新定義乙個新類。2.繼承的實質就是用已有的資料型別建立新的資料型別,並保留己有資料型別的特點,以舊類為基礎建立新類,新類包含了舊類的資料成員和成員函式,並且可以在新類中新增新的資料成員和成...

java多型知識點總結

多型 一種事物有多種表現形式。物件導向的最後乙個特徵,繼承和封裝都是為多型打基礎!生活中的多型 打招呼 中國人 你好 英國人 hello 日本人 拷逆七娃 南韓人 阿娘哈賽you 泰國人 薩瓦迪卡 1 方法的多型性 方法的重寫和過載 2 物件的多型性 物件的轉型上!person p new stud...