1. 程式人生 > >【知識點總結】第四章 類與對象

【知識點總結】第四章 類與對象

分享 ima src 對象分配 height ted 公有 功能 簡化

  • 面向對象程序設計的基本概念和特征

抽象性:對對象進行概括,抽出一類對象的公共性質並加以描述的過程。【數據抽象、行為抽象】

封裝性:將抽象得到的數據、行為、功能相結合,形成一個有機的整體。就是將數據與操作數據的函數代碼進行有機結合形成“類”,其中的數據和函數都是類的成員。

通過封裝,對成員訪問權限合理控制,使得不同類之間的相互影響減少到最低限度,進而增強數據的安全性和簡化程序編寫工作

繼承性

多態性

  • 類的定義和實現

class  類名 
{
     public:
                公有成員(數據成員和函數成員)
     private:
                私有成員(數據成員和函數成員)
     
protected: 保護型成員(數據成員和函數成員) };

其中,public成員是類與外部的接口。

舉例:

技術分享圖片

類的成員函數實現的一般語法形式(成員函數的實現寫在類的定義外面的情形):

返回值類型 類名::函數成員名(形參列表)
{
    函數體
}

其中,雙冒號稱為二元作用域運算符。

舉例:

技術分享圖片

註意:

關於類的成員數據

① 定義方法與普通變量相同,只是它必須被定義在類內部。

② 在類內部,成員數據只能被定義,但不能被初始化。

關於類的成員函數

如果在類內部僅聲明函數原型,在類外部定義函數體,則必須使用二元作用域分辨符::

聲明內聯成員函數:

方法1: 成員函數的函數體定義在類內部

技術分享圖片

方法2: 使用關鍵字inline

技術分享圖片

  • 對象的定義和使用

對象是類的實例。即,對象是類的變量。【關於對象的使用,可以參考結構體成員的使用。】

對象的定義:類名 對象名;

對象的使用:使用對象名.成員名的形式訪問共有成員

技術分享圖片

  • 類的構造函數和析構函數

構造函數:

介紹:① 是特殊的成員函數。 ② 用於在創建對象時為對象分配內存 ,並可以將其初始化到特定的狀態。

性質:① 構造函數的函數名與類名相同

② 構造函數無返回值,所以不能設定返回類型

,即使是void也不可以。

③ 構造函數是在創建對象時由編譯器自動調用的。

④ 構造函數可以是內聯函數、重載函數或帶默認形參值的函數。

舉例:

①用戶未定義構造函數的情形:

技術分享圖片

技術分享圖片

main函數中定義對象時,系統隱含調用了默認的構造函數。但,只能完成內存分配,卻無法進行初始化。

②用戶定義一個不帶參數的構造函數:

技術分享圖片

技術分享圖片

在main函數中定義對象時,系統隱含調用了用戶自定義構造函數。

③用戶定義一個帶參數的構造函數

技術分享圖片

技術分享圖片

實際定義對象時,也要帶有參數,否則,編譯系統報錯。

④用戶定義一個帶默認形參值的構造函數:

技術分享圖片

技術分享圖片

在main函數中,定義myclock時使用用戶給的實參完成初始化。 定義hisclock時使用構造函數中默認形參值進行初始化。

⑤展示構造函數是被編譯系統自動調用的:

技術分享圖片

技術分享圖片

main函數中定義對象時,主函數中並沒有顯式調用構造函數的代碼。 但運行截圖可見,構造函數中的提示被輸出了。

⑥構造函數的重載

技術分享圖片

技術分享圖片

編譯器根據創建對象時實參情況,自動調用最佳匹配的構造函數。

定義myclock處,編譯器自動調用不帶參數的構造函數;

定義hisclock處,編譯器自動調用帶參數的構造函數。

技術分享圖片

main函數中,

定義myclock處,存在歧義。 編譯器無從選擇哪一個為最佳匹配的構造函數。

定義hisclock 處,編譯器根據創建對象時實參情況,自動調用最佳匹配的構造函數,即帶參數的構造函數。

註意:

① 在一個類的定義中,可以包含多個構造函數。這些構造函數有相同的函數名稱,但具有不同的形參列表

② 定義對象時,編譯器會根據參數的個數、類型來決定調用哪一個重載構造函數。

③ 當重載不帶參數的構造函數和帶默認形參值的構造函數時,程序可能會產生二義性。因此,在實際編程中應避免這一情形。

【知識點總結】第四章 類與對象