一、類的六個預設成員函式
1、初始化和清理。(建構函式完成初始化,析構函式完成清理)
2、拷貝複製(拷貝建構函式使用同類物件建立物件,賦值過載是把乙個物件賦值給另乙個物件)
3、取位址和過載(主要是對普通物件和const物件取位址)
二,建構函式
1、建構函式是乙個特殊成員函式,名字和類名相同,建立類型別物件時,由編譯器自動呼叫。(!!!建構函式雖然名叫構造,但建構函式的主要任務不是開空間建立物件,而是初始化)
2、建構函式特徵
1 函式名和類名相同。
2 無返回值。
3 物件例項化時,由編譯器自動呼叫。
4 建構函式可以過載。
class date
//帶參的建構函式
date(int year, int month, int day)
private:
int _year;
int _month;
int _day;
}int main()
5 如果類中沒有顯示定義建構函式,編譯器會自動生成乙個無參的預設建構函式,一旦使用者顯示定義,編譯器不再生成。
6 無參的建構函式和全預設的建構函式都叫做預設建構函式,並且預設建構函式只能有乙個。(無參建構函式,全預設建構函式,編譯器生成的,都可以認為是預設成員函式)
class date
//但實際中,我們常使用全預設的建構函式,全預設的建構函式不傳引數也可以呼叫,此時會和無參的建構函式構成歧義
date(int year = 1996, int month = 8, int day = 13)
private:
int _year;
int _month;
int _day;
}7 編譯器生成的預設建構函式對於自定義型別會呼叫它的預設成員函式
class time
private:
int _hour;
}class date
int main()
8 成員變數的命名風格
class date
date(int year)
private:
int year;
}//所以一般採用下面的風格
class date
date(int year)
private:
_int year;
}
三、析構函式
1 析構函式是在物件銷毀時會自動呼叫析構函式,完成類的一些資源清理工作。
2析構函式特徵
1 析構函式是在類名前加上字元~
2 無引數,無返回值
3 乙個類有且只有乙個析構函式,如果沒有顯示定義,編譯器會自動生成
4 物件生命週期結束,c++系統自動呼叫析構函式。
5 編譯器生成的預設預設析構函式,對於自定義型別會呼叫它的析構函式。
class string
~string()
private:
char* str;
}class person
四、拷貝建構函式
1 拷貝建構函式只有乙個類型別物件的形參(一般用const)修飾,在用已存在的類型別物件建立新物件時由編譯器自動呼叫。
2 拷貝建構函式特徵
1 拷貝建構函式是建構函式的乙個過載形式。
2 拷貝建構函式的引數只有乙個,而且必須使用引用傳參,使用傳值得方式會引發無窮得遞迴呼叫。
class date
date(const date& d)
private:
int _year;
int _month;
int _day;
}3 如果沒有顯示定義,系統生成預設的拷貝建構函式。預設的拷貝建構函式對物件按記憶體位元組序完成拷貝,這種拷貝我們成為淺拷貝,也叫做值拷貝。(!!!對於自定義型別,使用淺拷貝可以完成)
4 對於日期類使用編譯器預設生成的拷貝建構函式就可以完成位元組序的值拷貝了,但對於一些特殊的類型別,還是需要自己實現拷貝建構函式。
class string
~string()
private:
char* str;
}class person
int main()
五、賦值運算子的過載
1 c++為了增強**的可讀性引入了運算子的過載,運算子是具有特殊函式名的函式,由返回型別,函式名字和引數列表。
2 特徵
1 函式原型: 返回值型別operator操作符(引數列表)。
2 不能連線其他的符號來建立新的操作符:比如operator@
3 過載操作符必須有乙個類型別或列舉型別的運算元
4 對於內建型別的操作符,不能改變其含義。做為類成員的過載函式時,
其形參看起來比運算元數目少1,成員函式的操作符有乙個預設的形參this指標,限定為第乙個形參。
5 .* and :: and sizeof and ?: and . 這五個運算子不能過載。
3 賦值運算子的過載
class date
date(const date& d)
//出了作用域,this不存在,但*this所指向的物件還在,如果使用傳值返回,還要在呼叫一次拷貝構造,用引用返回,返回的是臨時變數的別名,不呼叫拷貝構造。
date& operator=(const date& d)
return *this;
}private:
int _year;
int _month;
int _day;
}賦值運算子的注意點:
1 引數型別
2 返回值
3 檢測是否自己給自己賦值
4 返回*this
5 乙個類如果沒有顯示定義賦值運算子過載,編譯器會生成乙個,完成物件按位元組序的值拷貝。
六、const成員
1 const修飾類的成員函式叫做const成員函式,const修飾類的成員函式,實際修飾該成員函式隱含的this指標,表明該在成員函式不能對類的成員修改。
class date
const date* operator&()const //對const物件取位址
private:
int _year;
int _month;
int _day;
}
這兩個運算子一般不需要過載,使用編譯器生成的預設取位址的過載就可以,只有想讓別人取到指定的內容是,才會過載。 C 類和物件(中)
define crt secure no warnings 1 includeusing namespace std include if 0 建構函式是乙個特殊的成員函式,名字與類名相同,建立類型別物件時由編譯器自動呼叫,保證每個資料成員 都有 乙個合適的初始值,並且在物件的生命週期內只呼叫一次 ...
C 類和物件(中)
目錄 1.建構函式 2.析構函式 3.拷貝建構函式 4.賦值運算子的過載 5.const成員 6.取位址及const取位址操作符過載 乙個類中,如果沒有任何成員,稱為空類。任何乙個類中,都會包含6個預設的成員函式,即使是空類也會自動生成6個預設成員函式,如下為類中的6個預設成員函式 注意 預設成員函...
C 類和物件 類和物件
c 中物件的型別稱為類,類代表了某一批物件的共性和特徵,類是物件的抽象,而物件是類的具體例項,類是抽象的,不占用記憶體,而物件是具體的,占用 儲存空間,這點很重要,讀者需要牢記。類是使用者自己指定的型別,如果程式中要用到類型別,必須自己根據需要進行宣告,或者使用別人已設計好的類,c 標準本身並不提供...