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

2021-10-03 23:34:13 字數 2699 閱讀 9347

引言:類的6個預設的成員函式包括:

建構函式

析構函式

拷貝建構函式

賦值運算子過載函式

取位址操作符過載

const修飾的取位址操作符過載。

這裡預設的意思是如果你不定義,則編譯器會自動生成,而在實際操作中,我們往往自己實現前四個,後兩個讓編譯器自動生成建構函式,顧名思義,為物件分配空間,進行初始化。它是一種特殊的成員函式,具有以下特點:

函式名與類名相同。

無返回值。

構造物件的時候系統會自動呼叫建構函式。

可以過載。

可以在類中定義,也可以在類外定義。

如果類中沒有給出建構函式,編譯器會自動產生乙個預設的建構函式,如果類中有建構函式,編譯器就不會產生預設建構函式。

全預設的建構函式和無參的建構函式只能有乙個,否則呼叫的時候就會產生衝突。

沒有this指標。因為建構函式才是建立物件的,沒有建立物件就不會有物件的首位址。

舉個例子:

class

date

date

(int year =

1900

,int month =1,

int day =1)

//全預設的建構函式

date

(int year,

int month,

int day)

:_year

(year)

,_month

(month)

,_day

(day)

private

:int m_year;

int m_month;

int m_day;};

intmain()

建構函式的寫法通常有三種, 盡量使用初始化列表初始化,因為不管你是否使用初始化列表,對於自定義型別成員變數,一定會先使用初始化列表初始化。

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

類中包含以下成員,必須放在初始化列表位置進行初始化:

引用成員變數

const成員變數

自定義型別成員(該類沒有預設建構函式)

成員變數在類中宣告次序就是其在初始化列表中的初始化順序,與其在初始化列表中的先後次序無關

析構函式是一種特殊的成員函式,具有以下特點:

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

無引數無返回值(但有this指標)。

乙個類有且只有乙個析構函式,所以肯定不能過載。若未顯示定義,系統會自動生成預設的析構函式。

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

注意析構函式體內並不是刪除物件,而是做一些清理工作。

注意:物件生命週期結束後,後構造的物件先釋放,符合棧的思想。

舉例:最明顯的例子,棧。在棧的實現中。必不可少的一項就是銷毀函式。我們在這裡就可以借助棧的銷毀來理解析構函式。

typedef

int datatype;

class

seqlist

~seqlist()

//析構函式

}private

:int

* _pdata ;

size_t _size;

size_t _capacity;

};

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

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

class

date

date

(const date& d)

private

:int _year;

int _month;

int _day;

};

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

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

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

運算子過載的意義:增強**可讀性、讓自己定義的型別可以實現運算

舉例下面的例子,這裡將「=」過載,後續就可以直接實現乙個物件對另乙個物件的直接賦值

class

date

date (

const date& d)

date&

operator=(

const date& d)

}private

:int _year ;

int _month ;

int _day ;

};

將const修飾的類成員函式稱之為const成員函式,const修飾類成員函式,實際修飾該成員函式隱含的this指標,表明在該成員函式中不能對類的任何成員進行修改。

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

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

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

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

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

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

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

注意 注意 注意 注意 簡單歸納 函式返回值 引數作用 建構函式 無返回值 有參和無參兩種 初始化物件 析構函式 無返回值 無引數物件生命週期結束時,在物件刪除前做清理工作 拷貝建構函式 無返回值 引用型別的引數 用已存在的物件建立新的對像 運算子過載 不定至少有乙個 方便c 中的操作 還有兩個預設...

C 類的6個預設成員函式

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