C 類中的六大預設成員函式詳解

2022-09-28 03:36:08 字數 2551 閱讀 5374

在c++中,當你去建立乙個類的時候,即便這個類是空類,也會自動生成下面6個預設成員函式,在本篇部落格中,我將逐一分析下面6個預設成員函式。

建構函式並不是去建構函式的函式,而是去對函式進行初始化的函式。建構函式的函式名與類名相同,當我們每次建立類物件的時候,就會自動呼叫建構函式。建構函式在物件的生命週期中只會呼叫1次。

class date

private:

int _year;

int _month;

int _day;

};建構函式的幾個特點:

①函式名與類名相同程式設計客棧

②無返回值

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

④建構函式可以過載

class date

//需要傳參的建構函式

date(int year, int month, int day)

private:

int _year;

int _month;

int _day;

};⑤如果類中沒有顯式定義建構函式(就是自己沒有去定義建構函式),那麼編譯器會自動生成乙個無參的預設建構函式;

如果類中顯式定義了建構函式,那麼編譯器將不再生成,而是去使用使用者定義的建構函式。

⑥預設建構函式只能同時存在1個。預設建構函式分為以下3種:①無參的建構函式 ②全預設的建構函式 ③nvftw編譯器預設生成的建構函式

預設建構函式的共同特點是:不用傳參就可以呼叫

class date

//全預設的

date(int year = 2021, int month = 4, int day = 11)

private:

int _year;

int _month;

int _day;

};⑦編譯器生成的預設的建構函式,對內建型別(int, char, double...)不會做任何處理,但是會針對自定義型別的成員,呼叫它的建構函式去進行初始

構造函式呼叫的2種寫法:

int main()

;//c++11中才支援的寫法

}初始化列表:以冒號開始,接著是乙個以逗號分隔的資料成員列表,每個"成員變數"後面跟乙個放在括號中的初始值或表示式。

初始化列表,顧名思義就是對物件進行初始化的,但是我們已經可以在建構函式體內進行初始化了(通過對成員變數進行賦值來進行初始化),為什麼還需要初始化列表?

這是因為,有些型別的資料無法通過在建構函式體內進行賦值來進行初始化。這樣的資料型別有下面3種:

上面的三種資料型別有乙個共同的特點,它們都要求你在定義變數的時候進行賦值。

比如,引用成員變數,使用引用的時候必須進行初始化,否則語法就是錯誤的。

析構函式的作用與建構函式相反,在物件的生命週期結束的時候會自動呼叫析構函式,完成類的一些資源清理的工作。

析構函式的特點:

一般使用在那些涉及到動態記憶體開闢空間的類中,因為這樣的物件需要對其動態開闢的空間進行釋放。

class stack

//析構函式

~stack()

private:

int* _a;

int _size;

int _capacity;

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

拷貝建構函式的特點:

拷貝建構函式的2種呼叫方法(完全等價的):

int main()

在了解賦值運算子過載之前,我們需要先知道什麼是運算子過載。

運算子過載是具有特殊函式名的函式。

函式名:關鍵字operator後面接需要過載的運算子符號(如:operator>)

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

注意:

class date

//賦值運算子過載

date& operator=(const date& d)

private:

int _year;

int _month;

int _day;

};注意:賦值運算子過載必須有返回值,如果沒有返回值的話,無法解決 a = b = c 這種連續賦值的操作。

date d1(1);

date d2(0);

//賦值運算子過載

d2 = d1; //注意,只有2個運算元都是已經定義過的變數時,才會呼叫賦值運算子過載

//拷貝建構函式

date d3(d1);

淺拷貝是你在沒有寫拷貝建構函式和operator=時,編譯器自動呼叫的預設成員函式。它的功能是將物件以位元組的為單位拷貝過去。

這兩個運算子一般不需要過載,使用編譯器生成的預設取位址的過載即可(編譯器預設的基本就夠用了),只有特殊情況,才需要過載,比如想讓別人獲取到指定的內容。

class date

//const取位址操作符過載

const date* operator&()const

private:

int _year;

int _month;

int _day;

};

類的六大預設成員函式

1.建構函式 如果類的成員變數為私有的,要對這些成員初始化必須呼叫乙個共有的成員函式來進行.這個共有的成員函式在定義物件的同時會自動執行一次,被呼叫的函式稱為建構函式.建構函式的特點 1.函式名與類名相同.2.無返回值.3.建構函式可以過載.4.例項化物件時,系統呼叫相應的建構函式.5.建構函式可以...

c 類的預設成員函式

類的組成包括資料成員與成員函式。在類中一共有有六個預設成員函式,建構函式 拷貝建構函式 析構函式 賦值操作符過載 取位址操作符過載 const修飾的取位址操作符過載 利用乙個例項 日期類 進行舉例 先是定義乙個日期類 class date 這就是乙個簡單的類定義。下面依次介紹各個預設成員函式 一.建...

C 類的預設成員函式

class test 這些函式只有在需要的時候才會產生,空類占用 個位元組。類為了保護資料成員,其所有資料成員都預設是私有的 private 這也就意味著程式只能通過類裡面的函式提供介面來訪問資料成員。例如,下面程式用日期類建立了乙個物件,並進行初始化 class date int main 為了解...