C 類與物件 下

2021-09-09 08:47:27 字數 2488 閱讀 4262

類與物件(上) 和 類與物件(中) 兩篇部落格介紹了類的定義、作用域、this指標已經類的6個預設成員函式進行了相關介紹,接下來這篇部落格將對類的建構函式、static成員以及友元進行相關的介紹1.1 初始化列表

1、初始化列表的定義:以乙個冒號開始,接著是乙個以逗號分隔的資料成員列表,每個"成員變數"後面跟乙個放在括號中的初始值或表示式。(初始化列表其實可以理解為成員變數定義的地方)

2、初始化列表的使用:

class date

//函式體初始化,執行程式時,初始化列表會比函式體更先執行。

private:

int _year;

int _month;

int _day;

};

3、初始化列表的注意事項

(1) 每個成員變數在初始化列表中只能出現一次(初始化只能初始化一次)

(2) 類中包含以下成員,必須放在初始化列表位置進行初始化:引用成員變數,const成員變數,類型別成員變數(當該類沒有建構函式時)

(3) 盡量使用初始化列表初始化,因為不管你是否使用初始化列表,對於自定義型別成員變數,一定會先使用初始化列表初始化。

(4) 成員變數在類中宣告次序就是其在初始化列表中的初始化順序,與其在初始化列表中的先後次序無關,因此盡量保證定義順序與宣告順序相同。

class array

private:

int* _array;

int _size;

};

1.2 explicit關鍵字

定義:由於建構函式不僅可以構造與初始化物件,對於單個引數的建構函式,還具有型別轉換的作用,所以用explicit修飾建構函式,將會禁止單參建構函式的隱式轉換,同時可以增強**的可讀性。

2.1 static成員定義

宣告為static的類成員稱為類的靜態成員,用static修飾的成員變數,稱之為靜態成員變數;用static修飾的成員函式,稱之為靜態成員函式。靜態的成員變數一定要在類外進行初始化。

class a

a(const a& t)//拷貝建構函式

static int getacount()//靜態成員函式

private:

static int _scount;//靜態成員變數

};int a::_scount = 0;//靜態成員變數必須在類外進行初始化,而且必須帶上類名標明是屬於哪乙個類域

void testa()

2.2 static成員的特性

靜態成員為所有類物件所共享,不屬於某個具體的例項。

靜態成員變數必須在類外定義,定義時不新增static關鍵字。

類靜態成員即可用類名::靜態成員或者物件.靜態成員來訪問。

靜態成員函式沒有隱藏的this指標,不能訪問任何非靜態成員。

靜態成員和類的普通成員一樣,也有public、protected、private3種訪問級別,也可以具有返回值,const修飾符等引數。

3.1 友元函式

1、 友元函式的定義

因為cout的輸出流物件和隱含的this指標在搶占第乙個引數的位置。this指標預設是第乙個引數也就是左運算元了。但是實際使用中cout需要是第乙個形參物件,才能正常使用。所以我們要將operator《過載成全域性函式。但是這樣的話,又會導致類外沒辦法訪問成員,那麼這裡就需要友元來解決。

class date

ostream& operator<<(ostream& _cout)//還有乙個隱藏的形參this,佔據第乙個位置,接收左運算元

private:

int _year;

int _month;

int _day

};int main()

友元函式的定義:友元函式可以直接訪問類的私有成員,它是定義在類外部的普通函式,不屬於任何類,但需要在類的內部宣告,宣告時需要加friend關鍵字。

友元函式的特性:1、友元函式可訪問類的私有成員,但不是類的成員函式

2、友元函式不能用const修飾

3、友元函式可以在類定義的任何地方宣告,不受類訪問限定符限制

4、乙個函式可以是多個類的友元函式

5、友元函式的呼叫與普通函式的呼叫和原理相同

3.2 友元類

友元類的定義:友元類的所有成員函式都可以是另乙個類的友元函式,都可以訪問另乙個類中的非公有成員。

友元類的特性:

1、友元關係是單向的,不具有交換性。

2、比如上述time類和date類,在time類中宣告date類為其友元類,那麼可以在date類中直接訪問time

3、類的私有成員變數,但想在time類中訪問date類中私有的成員變數則不行。

4、友元關係不能傳遞如果b是a的友元,c是b的友元,則不能說明c時a的友元。

類與物件(下)

靜態成員 在類當中,用static修飾的成員變數,稱為靜態成員。用static修飾的成員函式,稱為靜態成員函式。靜態成員必須在類外進行初始化。靜態成員在類外初始化的方法 類名 成員名 在初始化時不用加關鍵字static,因為靜態成員的初始化不同建構函式,所以有其返回值,並且靜態成員不屬於某乙個物件,...

C 7 類與物件(下)

友元函式 友元類 內部類 小練習 小練習 宣告為static的類成員稱為類的靜態成員,用static修飾的成員變數,稱之為靜態成員變數 用static修飾的成員函式,稱之為靜態成員函式 classa a a const a a static intgetcount private int a sta...

C 類與物件

程式設計模型 所有計算機均由兩種元素組成 和資料.精確的說,有些程式是圍繞著 什麼正在發生 而編寫,有些則是圍繞 誰正在受影響 而編寫的.抽象封裝 封裝是一種把 和 所操作的資料 在一起,使這兩者不受外界干擾和誤用的機制.繼承 繼承是指乙個物件從另乙個物件中獲得屬性的過程.是物件導向程式設計的三大原...