1.概念:名字與類名相同,建立類型別物件時由編譯器自動呼叫,保證每個資料成員都有乙個合適的初
始值,並且在物件的生命週期內只呼叫一次。
2.特性:雖然名字叫構造,但其主任務並不是開闢空間建立物件,而是初始化物件。
-函式名與類名相同,
-無返回值,
-物件例項化時編譯器自動呼叫對應的建構函式,
-建構函式可以過載,
-通過無參建構函式建立物件時,物件後面不用跟括號,否則就變成了函式宣告,
-如果類中沒有顯示定義建構函式,c++編譯器會自動生成乙個無參的預設建構函式,一旦使用者顯示
定義,編譯器將不再生成,
-無參的建構函式和全預設的建構函式都稱為預設建構函式,並且預設建構函式只能有乙個。無參、
全預設、我們沒寫編譯器預設生成的建構函式,都可以認為是預設成員函式。
3.問:編譯器生成的預設建構函式有什麼用?
答:c++將型別分為內建型別(基本型別)和自定義型別。內建型別就是語法已經定義好的型別,
如int/char...,自定義型別就是我們使用class/struct/union自己定義的型別,編譯器
生成的預設建構函式會對自定型別成員_t呼叫它的預設成員函式。
1.概念:析構函式不是完成物件的銷毀,區域性物件銷毀工作是由編譯器完成的,而物件在銷毀時會自動
呼叫析構函式,完成類的一些資源清理工作。
2.特性:
-析構函式名是在類名前面加上字元~,
-無引數無返回值,
-乙個類有且只有乙個析構函式,若未顯示定義,系統會自動生成預設的析構函式,
-物件生命週期結束時,c++編譯系統會自動呼叫析構函式,
-編譯器生成的預設析構函式,會對自定義型別成員呼叫它的析構函式。
1.概念:只有單個形參,該形參是對本類型別物件的引用(一般常用const修飾),在用已存在的類型別
物件建立新物件時由編譯器自動呼叫。
2.特性:
-拷貝建構函式是建構函式的乙個過載形式,
-拷貝建構函式的引數只有乙個且必須使用引用傳參,使用傳值方式會引發無窮遞迴呼叫,
-若未顯示定義,系統生成預設的拷貝建構函式,預設的拷貝建構函式物件按記憶體儲存,按位元組序完成
拷貝,這種拷貝我們叫做淺拷貝,或者值拷貝,
-編譯器生成的預設拷貝建構函式的值拷貝(淺拷貝),在呼叫析構函式時,存在問題,需要深拷貝去
解決。
1.c++為了增強**的可讀性引入了運算子過載;
2.函式原型:返回值型別 operator操作符(引數列表);
3.注:
-不能通過連線其他符號來建立新的操作符,比如:operator@,
-過載操作符必須有乙個類型別或者列舉型別的運算元,
-用於內建型別的操作符,其含義不能改變,例如:內建的整形+,不能改變其含義,
-作為類成員的過載函式時,其形參看起來比運算元數目少1,成員函式的操作符有乙個預設的形參
this,限定為第乙個形參,
-(.*)、(::)、(sizeof)、(?:)、(.)注意以上5個運算子不能過載;
4.如果將運算子過載為全域性的,就需要成員變數是公有的,可是成員變數為公有,應該如何保證封裝性?
答:友元函式可以解決,或者直接過載為成員函式。
5.過載為成員函式時,左運算元是this指向的呼叫函式的物件;
6.賦值運算子過載主要有四點:
-引數型別 -返回值 -檢測是否自己給自己賦值 -返回*this
7.乙個類如果沒有顯示定義賦值運算子過載,編譯器會生成乙個,完成物件按位元組的值拷貝。
1.這兩個預設成員函式一般不用重新定義,使用編譯器生成的預設取位址的過載即可;
2.在特殊情況下,例如希望別人獲取指定的內容等,才需要過載。
C 類的6個預設成員函式
如果乙個類中什麼成員都沒有,簡稱為空類。空類中什麼都沒有嗎?並不是的,任何乙個類在我們不寫的情況下,都會自動生成下面6個預設成員函式。1.建構函式 1.1 概念 建構函式是乙個特殊的成員函式,名字與類名相同,建立類型別物件時由編譯器自動呼叫,保證每個資料成員都有乙個合適的初始值,並且在物件的生命週期...
類的6個預設成員函式
初始化物件,有且僅在定義乙個物件時自動執行一次的函式 類的資料成員是不能在宣告類的時候初始化的,因為類並不是乙個實體,而是一種抽象的資料型別,並不佔據儲存空間 1 函式名與類名相同 2 無返回值 3 例項化物件時系統會自動呼叫對應的建構函式 4 可過載 5 建構函式可以在類內定義,可以在類外定義 6...
C 中類的6個預設成員函式
1.建構函式 建構函式是乙個特殊的成員函式,名字與類名相同,建立類型別物件時,由編譯器自動呼叫,在物件的生命週期內隻且值呼叫一次,以保證每個資料成員都有乙個合適的初始值。建構函式特性 1 函式名與類名相同。2 沒有返回值。3 有初始化列表 可以不用 4 新物件被建立,由編譯器自動呼叫,且在物件的生命...