【知識點總結】第四章 類與對象
- 面向對象程序設計的基本概念和特征
抽象性:對對象進行概括,抽出一類對象的公共性質並加以描述的過程。【數據抽象、行為抽象】
封裝性:將抽象得到的數據、行為、功能相結合,形成一個有機的整體。就是將數據與操作數據的函數代碼進行有機結合,形成“類”,其中的數據和函數都是類的成員。
通過封裝,對成員訪問權限合理控制,使得不同類之間的相互影響減少到最低限度,進而增強數據的安全性和簡化程序編寫工作。
繼承性
多態性
-
類的定義和實現
class 類名 { public: 公有成員(數據成員和函數成員) private: 私有成員(數據成員和函數成員)protected: 保護型成員(數據成員和函數成員) };
其中,public成員是類與外部的接口。
舉例:
類的成員函數實現的一般語法形式(成員函數的實現寫在類的定義外面的情形):
返回值類型 類名::函數成員名(形參列表)
{
函數體
}
其中,雙冒號稱為二元作用域運算符。
舉例:
註意:
關於類的成員數據:
① 定義方法與普通變量相同,只是它必須被定義在類內部。
② 在類內部,成員數據只能被定義,但不能被初始化。
關於類的成員函數:
如果在類內部僅聲明函數原型,在類外部定義函數體,則必須使用二元作用域分辨符::
聲明內聯成員函數:
方法1: 成員函數的函數體定義在類內部
方法2: 使用關鍵字inline
-
對象的定義和使用
對象是類的實例。即,對象是類的變量。【關於對象的使用,可以參考結構體成員的使用。】
對象的定義:類名 對象名;
對象的使用:使用對象名.成員名的形式訪問共有成員。
-
類的構造函數和析構函數
構造函數:
介紹:① 是特殊的成員函數。 ② 用於在創建對象時為對象分配內存 ,並可以將其初始化到特定的狀態。
性質:① 構造函數的函數名與類名相同。
② 構造函數無返回值,所以不能設定返回類型
③ 構造函數是在創建對象時由編譯器自動調用的。
④ 構造函數可以是內聯函數、重載函數或帶默認形參值的函數。
舉例:
①用戶未定義構造函數的情形:
main函數中定義對象時,系統隱含調用了默認的構造函數。但,只能完成內存分配,卻無法進行初始化。
②用戶定義一個不帶參數的構造函數:
在main函數中定義對象時,系統隱含調用了用戶自定義構造函數。
③用戶定義一個帶參數的構造函數
實際定義對象時,也要帶有參數,否則,編譯系統報錯。
④用戶定義一個帶默認形參值的構造函數:
在main函數中,定義myclock時使用用戶給的實參完成初始化。 定義hisclock時使用構造函數中默認形參值進行初始化。
⑤展示構造函數是被編譯系統自動調用的:
main函數中定義對象時,主函數中並沒有顯式調用構造函數的代碼。 但運行截圖可見,構造函數中的提示被輸出了。
⑥構造函數的重載
編譯器根據創建對象時實參情況,自動調用最佳匹配的構造函數。
定義myclock處,編譯器自動調用不帶參數的構造函數;
定義hisclock處,編譯器自動調用帶參數的構造函數。
main函數中,
定義myclock處,存在歧義。 編譯器無從選擇哪一個為最佳匹配的構造函數。
定義hisclock 處,編譯器根據創建對象時實參情況,自動調用最佳匹配的構造函數,即帶參數的構造函數。
註意:
① 在一個類的定義中,可以包含多個構造函數。這些構造函數有相同的函數名稱,但具有不同的形參列表。
② 定義對象時,編譯器會根據參數的個數、類型來決定調用哪一個重載構造函數。
③ 當重載不帶參數的構造函數和帶默認形參值的構造函數時,程序可能會產生二義性。因此,在實際編程中應避免這一情形。
【知識點總結】第四章 類與對象