建構函式,拷貝建構函式,析構函式,賦值運算子過載

2021-07-23 22:07:38 字數 1863 閱讀 1660

1、建構函式

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

特性:

1、函式名與類名相同。

2、沒有返回值。

3、有初始化列表(可以不用)。

4、建構函式可以過載,實參決定了呼叫那個建構函式。

5、如果沒有顯示定義時,編譯器會提供乙個預設的建構函式。

6、無參建構函式和帶有預設值的建構函式都認為是預設的建構函式,並且預設建構函式只能有乙個。

7、新物件被建立,由編譯器自動呼叫,且在物件生命週期內僅呼叫一次。

8、建構函式不能用const來修飾.

初始化列表

定義:以乙個冒號開始,接著是乙個以逗號分隔的資料成員列表,每個資料成員後面跟乙個放在圓括號中的初始化式。

#include

using namespace std;

class date

private:

int year;

int month;

int day;

};void funtest()

int main()

2、拷貝建構函式

定義:只有單個形參,而且該形參是對本類型別物件的引用(常用const修飾),這樣的建構函式成為拷貝建構函式。建立物件時使用已有的同類物件來進行初始化。

特徵:    

1、它是建構函式的過載。

2、它的引數必須使用同型別物件引用傳遞。

3、如果沒有顯示定義,系統會自動合成乙個預設的拷貝函式,預設的拷貝函式會依次拷貝類的資料成員完成初始化。

#include

using namespace std;

class date

private:

int year;

int month;

int day;

};void funtest1(const date d)//傳值方式作為函式引數

date funtest2()//傳值方式作為函式返回值

void funtest()

int main()

date(const date& d)//拷貝建構函式:拷貝建構函式必須使用同型別物件引用傳遞

:year(d.year)

,month(d.month)

,day(d.day)

~date()//析構函式

private:

int year;

int month;

int day;

};void funtest()

int main()

4、賦值運算子過載

定義:過載操作符是具有特殊函式名的函式,關鍵字operator後面接需要定義的操作符符號。

操作符過載也是乙個函式,具有返回值和形參表,它的形引數目與操作符數目相同。

date& operator = (const date& d);//賦值運算子過載

private:

int year;

int month;

int day;

};date& date ::operator =(const date& d)

void funtest()

int main()

建構函式 拷貝建構函式 析構函式

1.如果定義了兩個預設建構函式,vc只回給出warning.2.如果有預設引數的預設構造,如果你給了第乙個預設的話 所有傳遞引數都要有預設植 否則報錯.不過如果是第乙個引數的預設值沒有給出的話,編譯器卻看不出問題,但是沒有 試過這種情況建構函式能不能正常工作.建構函式 用來初始化物件的資料成員,與類...

建構函式析構函式和拷貝建構函式

建構函式 建立類物件,並初始化其值。1.傳參 2.按照類成員宣告順序依次構造其成員 3.執行建構函式函式體 析構函式 用來完成物件被刪除前的一些清理工作 釋放類物件 1.執行析構函式函式 2.按照類中成員變數宣告順序的逆序依次析構其成員 初始化列表 初始化物件成員 呼叫成員物件的帶參構造 形式 在建...

C 建構函式 析構函式 拷貝建構函式

建構函式 析構函式 拷貝建構函式 如果類成員變數有初始值,用這些初始值初始化成員變數 如果類成員變數沒有初始值,則預設初始化該成員變數 class student int main 使用注意事項 語法 這個預設建構函式之所以對student有效,是因為我們為內建型別的資料成員提供了初始值 如果你的編...