c 類的預設成員函式

2021-08-17 12:25:20 字數 2487 閱讀 3544

類的組成包括資料成員與成員函式。

在類中一共有有六個預設成員函式,

建構函式

拷貝建構函式

析構函式

賦值操作符過載

取位址操作符過載

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

利用乙個例項(日期類)進行舉例

先是定義乙個日期類

class date

;

這就是乙個簡單的類定義。下面依次介紹各個預設成員函式

一.建構函式

因為在類中,資料是私有的,只能在類內進行訪問操作,所以初始化這些資料也就只能在類進行,需要定義乙個公有函式,這就是建構函式。這個函式只有在定義物件時對其初始化使用一次。

date();
建構函式的函式沒有返回值。

建構函式的名字一定是與類名相同的。

建構函式可以過載,可以是有參的,無參的

在進行類的例項化的時候,就會自動呼叫建構函式,若是沒有定義就會呼叫系統自動生成的建構函式,若是有人為定義,則會根據其引數進行選擇對應的建構函式及其過載函式。

建構函式可以其他成員函式相同,也可以在類外進行定義,在類內宣告。

無參的建構函式與全預設的建構函式都認為是預設建構函式,並且預設的建構函式只能有乙個

//無參的建構函式

date()

//全預設的建構函式

date(int year=1900, int month=1, int month=1)

int main()

由於上述兩種函式的呼叫方式相同,都是不需要傳參的,所以如果乙個類中既有無參的建構函式又有全預設的建構函式,就會出現錯誤,不知道當前應該呼叫哪個建構函式來進行初始化。所以在類的定義中不可以同時出現這兩種建構函式。

二.拷貝建構函式

拷貝建構函式是建立隊形在初始化時用同類的物件進行初始化。也是一種建構函式。

//拷貝建構函式:

date(const

date& d)

int main()

拷貝建構函式是建構函式的過載

拷貝建構函式的引數必須使用引用傳參,若使用傳值傳參則會引起無限的遞迴呼叫。在呼叫這個函式時,會傳進來乙個實參,形參用於接收,所以在這個函式的棧幀中會形成乙個臨時變數,用於儲存實參的值,這裡的這個空間需要用拷貝建構函式初始化,所以此時就需要遞迴呼叫拷貝建構函式,呼叫拷貝函式又會需要形成臨時變數,所以就會一直遞迴呼叫,就無法出來。造成了無窮遞迴的現象。

若在類中沒有定義,則系統會預設預設的拷貝建構函式,就會依次拷貝類成員進行初始化。

三.析構函式

當乙個物件的生命週期結束時,c++編譯系統會自動呼叫乙個成員函式,就是析構函式。

1. 析構函式的函式名是在類名前加~

2. 析構函式沒有引數也沒有返回值

3. 乙個類中就只有乙個析構函式,不支援過載,若沒有定義,則系統會預設生成。

4. 析構函式的作用是清理空間,若在建立物件時,有malloc出來的空間,將他們銷毀。析構函式並不是刪除物件,物件是在生命週期結束後會有作業系統將其收回。不需要人為收回。

class test

~test()

}private:

int *ptr;

}

析構函式的呼叫順序與建構函式相反。先定義的函式先呼叫其建構函式,後呼叫析構函式。

四.運算子過載

運算子過載是為了增加程式的可讀性。因為沒有經過過載的運算子是不能運算自定義型別的,例如日期的加減,就不能單純的只用未過載的運算子進行計算。需要根據不同情況自己定義。

運算子過載的特徵:

operator+運算子 構成函式名

過載運算子以後,不能改變運算子的優先順序/結合性/運算元個數

//運算子小於的過載

bool

operator

<(const date& d)

c++中不可以過載的運算子

1. .*

2. sizof

3. ::

4. ? :

5. .

賦值運算子的過載

首先需要說明一下賦值運算子與拷貝建構函式的區別

拷貝建構函式是在建立物件時使用的,用乙個已有物件初始化這個剛建立的物件。而賦值是給乙個已經建立好的物件進行拷貝賦值。

函式名是operator+運算子,為了可讀性更高,編譯系統會在碰見過載的運算子時,檢查運算子的運算元是否為自定義型別,若是自定義型別,就轉到運算子過載函式。進行函式內部操作。

bool

operator=(const date& d)

在這裡是只需要傳乙個引數。還有乙個是隱含的this指標,所以上述**就可以等價於

bool

operator=(date *this,const date& d)

C 類的預設成員函式

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

類的預設成員函式

class time time int hour,int minute,int second 有參的建構函式 time int hour 9,int minute 54,int second 23 全預設建構函式 time int hour,int minute 12,int second 30 半...

C 預設成員函式

概念 object oriented programming,縮寫 oop 是一種程式設計范型,同時也是一種程式開發的方法。物件指的是類的例項,將物件作為程式的基本單元,將程式和資料封裝其中,以提高軟體的重用性 靈活性和擴充套件性。c 不是純物件導向語言,而是基於物件導向的語言 ps 因為它包含c的...