C 類與物件(中)

2021-09-09 08:05:26 字數 2871 閱讀 8609

類與物件(上)對類的定義、類的作用域、類的物件模型、this指標等進行了相關介紹,下面我們將對類的6個預設成員函式進行詳細的介紹:

2.1 建構函式的定義

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

2.2 建構函式的特性

(1) 函式名與類名相同。

(2) 無返回值。

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

(4) 建構函式可以過載。

#include using namespace std;

class date

// 2.帶參建構函式

date(int year, int month, int day)

//3、帶預設值的建構函式

date(int year = 2019, int month = 1, int day = 1)

private:

int _year;

int _month;

int _day;

};int main()

注:1、若類中未定義建構函式,系統會自動生成乙個無參的預設建構函式。

2、無參建構函式和帶全預設值得建構函式都屬於預設建構函式,預設建構函式不需要傳任何引數即可呼叫,但預設建構函式只有乙個。

3、c++系統將型別分為內建型別(語法已經定義好的型別,如:int、char、double等)和自定義型別(使用class/struct/union定義的型別),系統給的預設建構函式只會對自定義型別的成員呼叫成它的預設成員函式,因此我們必須自己宣告和定義自己的建構函式來對內建型別的成員變數進行初始化。

3.1 析構函式的定義

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

3.2 析構函式的特性

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

(2) 無引數無返回值。

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

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

#includeusing namespace std;

class string

~string()

private:

char* _str;

};class person

;int main()

注:1、若未定義析構函式,系統會給出缺省的析構函式。

2、呼叫析構函式不需要引數,析構函式也沒有返回值。

3、預設析構函式和預設建構函式一樣,不會處理內建型別的成員變數,因此當我們建立了需要清理的內建型別的成員變數時,必須自己宣告和定義乙個析構函式老進行資源清理。

4.1 拷貝建構函式的定義

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

4.2 拷貝建構函式的特性

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

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

class date

date(const date& d)

private:

int _year;

int _month;

int _day;

};int main()

注:拷貝建構函式的引數必須使用引用傳參的原因

注:1、若未定義拷貝建構函式,系統會給出缺省拷貝建構函式,預設拷貝建構函式只實現值拷貝或是淺拷貝,即物件按記憶體儲存的位元組序完成拷貝。

5.1運算子過載

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

5.2運算子過載函式的特性

(1) 引數型別

(2) 返回值

(3) 檢測是否自己給自己賦值

(4) 返回*this

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

class date

date(const date& d)

date& operator=(const date& d) }

private:

int _year;

int _month;

int _day;

};

注:1、若未定義賦值運算子過載函式,系統會給出缺省賦值運算子過載函式。

2、過載操作符必須有乙個類型別或者列舉型別的運算元。

3、用於內建型別的操作符,其含義不能改變,例如:內建的整型+,不 能改變其含義。

4、作為類成員的過載函式時,其形參看起來比運算元數目少1成員函式的

操作符有乙個預設的形參this,限定為第乙個形參。

5、.* 、:: 、sizeof 、?: 、. 注意以上5個運算子不能過載。

C 類與物件(中)

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

C 中的類與物件

什麼是類與物件?類是一種抽象化的資料型別,一般而言,它包括資料與處理資料的函式這兩大部分。而物件則是對某一類的例項。例如 class cmyclass cmyclass為類 cmyclass myclass myclass為物件1.類的定義與特點 類的定義示例如下 class cmyclass 各個...

c 中的類與物件

我們都知道,在c語言中,結構體是指一系列相同型別或者不同型別的資料構成的資料集合。在c語言中我們將結構體定義為 struct student 而我們知道,在c語言中,資料 和 處理資料的操作 函式 是分開的,語言本身並沒有支援 資料和函式 之間的關聯性。所以在c語言的結構體中,只能存放資料,定義變數...