C 類的6個預設成員函式

2021-10-10 23:24:23 字數 4300 閱讀 5651

如果乙個類中什麼成員都沒有,簡稱為空類。空類中什麼都沒有嗎?並不是的,任何乙個類在我們不寫的情況下,都會自動生成下面6個預設成員函式。

1.建構函式

1.1 概念

建構函式是乙個特殊的成員函式,名字與類名相同,建立類型別物件時由編譯器自動呼叫,保證每個資料成員都有乙個合適的初始值,並且在物件的生命週期內只呼叫一次

2.1 特性

建構函式是特殊的成員函式,需要注意的是,建構函式的雖然名稱叫構造,但是需要注意的是建構函式的主要任務並不是開空間建立物件,而是初始化物件。

其特徵如下:

函式名與類名相同。

無返回值。

物件例項化時編譯器自動呼叫對應的建構函式。

建構函式可以過載。

class date

// 2.帶參建構函式

date (

int year,

int month ,

int day )

private :

int _year ;

int _month ;

int _day ;};

intmain()

如果類中沒有顯式定義建構函式,則c++編譯器會自動生成乙個無參的預設建構函式,一旦使用者顯式定義編譯器將不再生成。

無參的建構函式和全預設的建構函式都稱為預設建構函式,並且預設建構函式只能有乙個。注意:無參

建構函式、全預設建構函式、我們沒寫編譯器預設生成的建構函式,都可以認為是預設成員函式。

2. 析構函式2.1 概念

通過建構函式的認識,我們知道乙個物件時怎麼來的,那乙個物件又是怎麼沒呢的?

析構函式:與建構函式功能相反,析構函式不是完成物件的銷毀,區域性物件銷毀工作是由編譯器完成的。而物件在銷毀時會自動呼叫析構函式,完成類的一些資源清理工作。

2.2 特性

析構函式是特殊的成員函式。 其特徵如下:

析構函式名是在類名前加上字元 ~。

無引數無返回值。

乙個類有且只有乙個析構函式。若未顯式定義,系統會自動生成預設的析構函式。

物件生命週期結束時,c++編譯系統系統自動呼叫析構函式。

typedef

int datatype;

class seqlist

~seqlist()

}private :

int* _pdata ;

size_t _size;

size_t _capacity;

};

3.拷貝建構函式3.1 概念

建構函式:只有單個形參,該形參是對本類型別物件的引用(一般常用const修飾),在用已存在的類型別物件建立新物件時由編譯器自動呼叫。

3.2 特性

拷貝建構函式也是特殊的成員函式,其特徵如下:

拷貝建構函式是建構函式的乙個過載形式。

class date

date

(const date& d)

//引數只有乙個且必須使用引用傳參,

private:

int _year;

int _month;

int _day;};

intmain()

拷貝建構函式的引數只有乙個且必須使用引用傳參,使用傳值方式會引發無窮遞迴呼叫

若未顯示定義,系統生成預設的拷貝建構函式。預設的拷貝建構函式物件按記憶體儲存按位元組序完成拷貝,這種拷貝我們叫做淺拷貝,或者值拷貝。

** 4.賦值運算子過載**

c++為了增強**的可讀性引入了運算子過載,運算子過載是具有特殊函式名的函式,也具有其返回值型別,函式名字以及引數列表,其返回值型別與引數列表與普通的函式類似。

函式名字為:關鍵字operator後面接需要過載的運算子符號。

函式原型:返回值型別 operator操作符(引數列表)

注意:不能通過連線其他符號來建立新的操作符:比如operator@

過載操作符必須有乙個類型別或者列舉型別的運算元

用於內建型別的操作符,其含義不能改變,例如:內建的整型+,不能改變其含義

作為類成員的過載函式時,其形參看起來比運算元數目少1成員函式的操作符有乙個預設的形參this,限定為第乙個形參

.*、:: 、sizeof 、?: 、. 注意以上5個運算子不能過載。

常用的運算子過載:

class int;

//宣告int類

//輸入輸出流的過載

ostream& operator<<

(ostream &out,

const int& i)

;//宣告

istream& operator>>

(istream &in, int& i)

;//宣告

class int

~int()

public:

int operator+

(const int& i)

; int operator-

(const int& i)

; int operator*

(const int& i)

; int operator/

(const int& i)

; int operator%

(const int& i)

; int& operator+=(

const int& i)

;//物件要改變自己,所以返回物件的引用

int& operator-=(

const int& i)

; int& operator*=(

const int& i)

; int& operator/=(

const int& i)

; int& operator%=(

const int& i)

; bool operator==

(const int& i)

; bool operator!=

(const int& i)

; int operator>>

(int offset)

;//右移

int operator<<

(int offset)

;//左移

int& operator>>=

(int offset)

; int& operator<<=

(int offset)

; int operator++

(int

)//語法規定,給定int型的引數,過載為後++

int operator++()

//前++,物件自己先++,值回改變,所以用引用返回

int operator--

(int);

int& operator--()

; private:

int m_i;};

ostream& operator<<

(ostream &out,

const int& i)

istream& operator>>

(istream &in, int& i)

5.預設的取位址運算子(取當前物件的位址,即this指標)

class test

private:

int m_data;

};

6.預設的常物件取位址運算子

class test

private:

int m_data;

};

C 類的6個預設成員函式

1.概念 名字與類名相同,建立類型別物件時由編譯器自動呼叫,保證每個資料成員都有乙個合適的初 始值,並且在物件的生命週期內只呼叫一次。2.特性 雖然名字叫構造,但其主任務並不是開闢空間建立物件,而是初始化物件。函式名與類名相同,無返回值,物件例項化時編譯器自動呼叫對應的建構函式,建構函式可以過載,通...

類的6個預設成員函式

初始化物件,有且僅在定義乙個物件時自動執行一次的函式 類的資料成員是不能在宣告類的時候初始化的,因為類並不是乙個實體,而是一種抽象的資料型別,並不佔據儲存空間 1 函式名與類名相同 2 無返回值 3 例項化物件時系統會自動呼叫對應的建構函式 4 可過載 5 建構函式可以在類內定義,可以在類外定義 6...

C 中類的6個預設成員函式

1.建構函式 建構函式是乙個特殊的成員函式,名字與類名相同,建立類型別物件時,由編譯器自動呼叫,在物件的生命週期內隻且值呼叫一次,以保證每個資料成員都有乙個合適的初始值。建構函式特性 1 函式名與類名相同。2 沒有返回值。3 有初始化列表 可以不用 4 新物件被建立,由編譯器自動呼叫,且在物件的生命...