1. 程式人生 > >C++類與物件基本語法(1)

C++類與物件基本語法(1)

一、概述

1、什麼是物件

1、萬物皆物件。 2、程式就是一組物件,物件之間通過訊息交換資訊。 3、類就是對物件的描述和抽象,物件就是類的具體化和例項化。

2、通過類描述物件

類就是從屬性和行為兩個方面對物件進行抽象。 屬性:姓名、年齡、學號 行為:吃飯、睡覺、學習

3、面向物件程式設計(OOP)

1、精通一種面向物件的元語言 —— UML。 2、研究設計模式——GOF。

二、類的基本語法

1、類的定義

class 類名{ };

1.1、成員變數 —— 屬性

class 類名{ 型別 成員變數名; };

1.2、成員函式 —— 行為

class 類名{ 返回型別 成員函式名(形參表){ 函式體 } }; 如: class Student{ string m_name; int m_age; void eat(const string& food){ … } };

2、訪問控制屬性

(1)公有成員:public,誰都可以訪問。 (2)私有成員:private,只有自己可以訪問。 (3)保護成員:protected,只有自己和自己的子類可以訪問。 (4)類的成員預設訪控屬性為私有,而結構體的成員預設訪控屬性為公有。

3、建構函式

class 類名{ … 類名(形參表){ 建構函式體; } }; 當一個物件被建立時,建構函式會自動被執行,其引數來自構造實參。 A、建構函式可以通過構造引數實現過載。 B、如果一個類沒有定義任何建構函式,那麼系統就會預設的為其提供一個無參建構函式,該建構函式對於基本型別的成員變數不做初始化,對於類型別的成員變數,呼叫其相應型別的無參建構函式初始化。 C、物件的建立過程 分配記憶體 -> 呼叫建構函式 -> 呼叫類型別成員的建構函式 -> 建構函式的程式碼

4、初始化表

class 類名{ 類名(…) : 初始化表{ 建構函式體; } }; const int x = 100; x = 100; int& a = b; a = b; (1)如果類中含有常量或引用型的成員變數,必須通過初始化表對其初始化。 (2)成員變數的初始化順序僅與其被宣告的順序有關,而與初始化表的順序無關。 class A{ public: A(char* psz) : m_str(psz), m_len(m_str.length()){}//因為m_len先宣告,故先初始化,但在初始化m_len時,要用到m_str的長度,但m_str現在還不存在,故會出錯 private: size_t m_len; string m_str; }; //正確的做法是在初始化表中減少變數間的相互耦合,這裡把m_str.length()改為strlen(psz)。

5、this指標

1、一般而言,在類的建構函式或成員函式中,關鍵字this表示一個指標,對於建構函式而言,this指向正在被構造的物件,對於成員函式而言,this指向呼叫該函式的物件。 2、this指標的用途 (1)在類的內部區分成員變數。 (2)在成員函式中返回呼叫物件自身。 (3)在成員函式內部通過引數向外界傳遞呼叫物件自身,以實現物件間互動。 class A{ //B m_b; B* m_b; B& m_b; }; class B{ A m_a; }; sizeof(A) ?

6、解構函式

class 類名{ ~類名(void){ 解構函式體; } }; 當一個對被銷燬時,自動執行解構函式。 區域性物件離開作用域時被銷燬,堆物件被delete時被銷燬。 如果一個類沒有定義任何解構函式,那麼系統會提供一個預設解構函式。預設解構函式對基本型別的成員變數什麼也不幹,對類型別的成員變數,呼叫相應型別的解構函式。 一般情況下,在解構函式中釋放各種動態分配的資源。 構造:基類-》成員-》子類 析構:子類-》成員-》基類