一、組合
將乙個類的物件作為另乙個類的成員,被稱作組合或包含
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...