類的六個預設成員函式

2021-09-25 04:16:08 字數 1905 閱讀 9753

如果乙個類中什麼成員都沒有,則就是空類。但是空類中什麼都沒有嗎?其實並不是這樣的,任何類在我們不寫的情況下,都會自動生成下面六個預設成員函式。

class date //無參的建構函式

date(int year, int month, int day) //有參的建構函式

//這兩個建構函式構成了函式的過載,因為它們的引數不同

void printdate()

private:

int _year;

int _month;

int _day;

};int main()

class date 

private:

int _year;

int _month;

int _day;

};void test()

7、如果使用者自己沒有定義建構函式,則c++系統會自動生成乙個建構函式,稱作預設建構函式或者預設建構函式。只是這個建構函式是空的,不執行任何操作。它好像看起來沒有什麼用處,但是為什麼還要存在呢?

class time 

private:

//基本型別(內建型別)

int _hour;

int _minute;

int _second;

};class date ;

int main()

接下來我們看一下它建立物件時的彙編語句

從圖上我們看到我們並沒有顯式的在類中定義建構函式,編譯器自動的生成了乙個預設的建構函式,此時這個預設的建構函式就有用了,它將會對自定義型別的成員_t呼叫它的預設成員函式

特徵

上面我們給出的string類,我們使用s2拷貝構造s1,並且我們使用的是系統給出的預設拷貝建構函式,使用的是淺拷貝。當我們構造完成要釋放資源時,則會對同乙份記憶體空間釋放兩次,所以程式就會崩潰。因此當乙個類管理資源的時候,將來這個類我們一定要自己顯式的實現它,否則就是淺拷貝,則會引起程式崩潰。

如果我們自己沒有實現拷貝建構函式,則編譯器也會為我們實現乙個預設的拷貝建構函式,那麼我們什麼時候使用編譯器給出的,什麼時候我們自己去實現呢?

int main()
作為類成員的過載函式時,其形參看起來比運算元數目少一

賦值運算子過載

檢測是否自己給自己賦值

返回*this

乙個類如果沒有顯式定義賦值運算子過載,編譯器也會生成乙個,完成物件按位元組序的拷貝

取位址及const取位址操作符過載

class date 

const date* operator&()const

private:

int _year;

int _month;

int _day;

};

類的六個預設成員函式

類的六個預設成員函式 1.建構函式 2.拷貝建構函式 3.析構函式 4.賦值操作符過載 5.取位址操作符過載 6.const修飾的取位址操作符過載 建構函式 是乙個特殊的成員函式,名字與類名相同,建立類型別物件時,由編譯器自動呼叫,在物件的生命週期內隻且只呼叫一次,以保證每個資料成員都有乙個合適的初...

類的六個預設成員函式總結(一)

類有六個預設成員函式 今天我們來看一下前三個 一 建構函式 什麼是建構函式呢?看下圖 如圖 建構函式的特性有 1.函式名與類名相同 2.沒有返回值 3.有初始化列表 可以不用 4.新物件被建立,由編譯器自動呼叫,且在物件的生命週期內僅呼叫一次 5.建構函式可以過載,實參決定了呼叫哪個建構函式 6.如...

C 之類的六個預設成員函式

在c 類中同樣的預設成員函式一共有六個,即使使用者不定義,編譯器也可以給出。分別為 1 建構函式 2 析構函式 3 拷貝建構函式 4 賦值運算 5 取位址運算 6 const取位址運算 我們一下述程式為例驗證下上面說法 include using namespace std class comple...