C 類與物件(2)

2021-09-25 08:10:41 字數 3243 閱讀 8893

一.類的6個預設建構函式

建構函式:主要完成初始化工作

析構函式:主要完成清理工作

拷貝建構函式:使用同類物件初始化建立物件

賦值操作符過載:主要是把乙個物件賦值給另乙個物件

取位址及const取位址操作符過載:主要是普通物件和const物件取位址

二.建構函式

1.概念

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

2.特性

不是建立物件,而是初始化物件

特徵:(1)函式名與類名相同

(2)無返回值

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

(4)建構函式可以過載

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

(6)無參的建構函式和全預設的建構函式都成為預設建構函式

(7)編譯器生成預設的建構函式會對自定型別成員呼叫它的預設成員引數

class time

private:

int _hour;

int _minute;

int _second;

};class date

//含參建構函式

date(int year, int month, int day)

private:

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

int _year;

int _month;

int _day;

//自定義型別

time _t;

};int main()

三.析構函式

1.概念

與建構函式功能相反,物件在銷毀時會自動呼叫析構函式,完成類的一些資源清理工作

2.特性

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

(2)無引數無返回值

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

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

ypedef int datatype;

class seqlist

~seqlist() }

private:

int* _pdata;

int _size;

int _capacity;

};

四.拷貝建構函式

1.概念

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

2.特徵

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

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

(3)若未顯示定義,系統生成預設的拷貝建構函式(淺拷貝)

(4)編譯器生成的預設拷貝建構函式可以完成位元組序的值拷貝

class date

date(const date& d)

private:

int _year;

int _month;

int _day;

};int main()

3.淺拷貝

將乙個物件中內容原封不動的拷貝到另乙個物件中,兩個物件指向同一塊位址空間。

若類中涉及到資源管理,需顯示實現拷貝建構函式

class date

private:

int _year;

int _month;

int _day;

};int main()

五.賦值運算子過載

1.運算子過載

c++為了增強**的可讀性引入了運算子過載

函式名:關鍵字operator+需要過載的運算子符號

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

注意:(1)不能通過連線其他符號來建立新的操作符,如:operator@

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

(3)用於內建型別的操作符,其含義不能改變,如:內建的整形+,不能改變其含義(4)作為類成員的過載函式時,其形參看起來比運算元數目少1,成員函式的操作符有乙個預設的形參this,限定為第乙個形參

(5)「.*、::、sizeof、?:、. 」 以上五個運算子不能過載

class date

public:

int _year;

int _month;

int _day;

};bool operator==(const date& d1, const date& d2)

int main()

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;

};

六.const成員

1.const修飾類的成員函式

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

2.const物件可以呼叫其他的const函式

非const物件可以呼叫const成員函式和非const成員函式

const成員函式內可以呼叫其他的const成員函式

非const成員函式內可以呼叫其他的const成員函式和非const成員函式

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

這兩個預設成員函式一般不用重新定義,編譯器缺省會生成

class date

const date* operator()const

private:

int _year;

int _month;

int _day;

};

C 類與物件 2

1.類的6個預設成員函式如果乙個類中什麼成員都沒有,簡稱為空類。空類中什麼都沒有嗎?並不是的,任何乙個類在我們不寫的情況下,都會自動生成下面6個預設成員函式。建構函式 拷貝建構函式 析構函式 賦值運算子過載函式 取位址運算子過載函式 const修飾的取位址運算子過載 2.建構函式 2.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...