C 類與物件 2

2021-09-29 07:45:54 字數 3716 閱讀 6981

1. 類的6個預設成員函式

如果乙個類中什麼成員都沒有,簡稱為空類。空類中什麼都沒有嗎?並不是的,任何乙個類在我們不寫的情況下,都會自動生成下面6個預設成員函式。

建構函式

拷貝建構函式

析構函式

賦值運算子過載函式

取位址運算子過載函式

const修飾的取位址運算子過載

2. 建構函式

2.1建構函式概念

對於以下的日期類:

class

date

void

display()

private

:int _year;

int _month;

int _day;};

intmain()

對於date類,可以通過setdate公有的方法給物件設定內容,但是如果每次建立物件都呼叫該方法設定資訊,未免有點麻煩,那能否在物件建立時,就將資訊設定進去呢?

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

2.1特性

建構函式是特殊的成員函式,需要注意的是,建構函式的雖然名稱叫構造,但是需要注意的是建構函式的主要任務並不是開空間建立物件,而是初始化物件。

其特徵如下:

函式名與類名相同。

無返回值。

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

建構函式可以過載。

class

date

// 2.帶參建構函式

date (

int year,

int month ,

int day )

private

:int _year ;

int _month ;

int _day ;};

void

testdate()

如果類中沒有顯式定義建構函式,則c++編譯器會自動生成乙個無參的預設建構函式,一旦使用者顯式定義編譯器將不再生成。

class

date

*/private

:int _year;

int _month;

int _day;};

void

test()

無參的建構函式和全預設的建構函式都稱為預設建構函式,並且預設建構函式只能有乙個。注意:無參建構函式、全預設建構函式、我們沒寫編譯器預設生成的建構函式,都可以認為是預設成員函式。

// 預設建構函式

class

date

date (

int year =

1900

,int month =1,

int day =1)

private

:int _year ;

int _month ;

int _day ;

};

3. 析構函式

3.1概念

析構函式:與建構函式功能相反,析構函式不是完成物件的銷毀,區域性物件銷毀工作是由編譯器完成的。而物件在銷毀時會自動呼叫析構函式,完成類的一些資源清理工作。

3.2特性

析構函式是特殊的成員函式。

其特徵如下:

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

無引數無返回值。

乙個類有且只有乙個析構函式。若未顯式定義,系統會自動生成預設的析構函式。

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

typedef

int datatype;

class

seqlist

~seqlist()

}private

:int

* _pdata ;

size_t _size;

size_t _capacity;

};

4. 拷貝建構函式

4.1概念

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

4.2特徵

拷貝建構函式也是特殊的成員函式,其特徵如下:

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

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

class

date

date

(const date& d)

private

:int _year;

int _month;

int _day;};

intmain()

若未顯示定義,系統生成預設的拷貝建構函式。 預設的拷貝建構函式物件按記憶體儲存按位元組序完成拷貝,這種拷貝我們叫做淺拷貝,或者值拷貝。

class

date

private

:int _year;

int _month;

int _day;};

intmain()

5. 賦值運算子過載

5.1運算子過載

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

函式名字為:關鍵字operator後面接需要過載的運算子符號。 函式原型:返回值型別 operator操作符(引數列表)

注意

5.2賦值運算子過載

賦值運算子主要有四點

引數型別

返回值檢測是否自己給自己賦值

返回*this

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

6. const成員函式

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

7. 取位址及const取位址操作符過載
這兩個運算子一般不需要過載,使用編譯器生成的預設取位址的過載即可,只有特殊情況,才需要過載,比如想讓別人獲取到指定的內容!

C 類與物件(2)

一.類的6個預設建構函式 建構函式 主要完成初始化工作 析構函式 主要完成清理工作 拷貝建構函式 使用同類物件初始化建立物件 賦值操作符過載 主要是把乙個物件賦值給另乙個物件 取位址及const取位址操作符過載 主要是普通物件和const物件取位址 二.建構函式 1.概念 建構函式是乙個特殊的成員函...

C 類與物件 2

所謂建構函式其實就是初始化物件的乙個函式 每個物件在建立時都會自動呼叫建構函式,如果你沒有定義,就會呼叫系統預設的建構函式。建構函式的函式名與類名相同 建構函式無返回型別 void也不可以 在物件建立時由系統自動呼叫,建構函式的訪問屬性為public。class a 類名 類名 類名 物件名 拷貝建...

2)類與物件

public class dog void hungry void sleeping 乙個類可以包含以下型別變數 構造方法 class person static void main string args 例如 hello hello new hello 這時呼叫的是hello的無引數構造方法 h...