c++中類的六個預設成員函式 :建構函式, 拷貝建構函式, 析構函式, 賦值操作符過載,取位址操作符過載,const修飾的取位址操作符過載。
下面介紹的是類的六個預設成員函式:
一,建構函式:
1,定義:對成員變數進行初始化,有且僅在定義物件時自動執行一次的成員函式。
2,特徵: a,函式名與類名相同;
b,無返回值;
c,物件例項化時,系統自動呼叫相應的建構函式;
d,建構函式可以過載;
e,可在類中定義,也可在類外定義(::);
f,如果類定義中未給出建構函式,則編譯器自動產生乙個預設的建構函式,反之則不生成;
g,無參建構函式和全預設函式都認為是預設建構函式,並且預設建構函式只能有乙個。
3,成員變數的初始化: a,初始化列表(更高效);
b,函式類賦值。
4,必須放在初始化列表裡的成員變數: a,常量成員變數(常量建立時必須初始化)
b,引用型別成員變數(引用建立時必須初始化)
c,沒有預設建構函式的類成員變數。
注:若預設引數宣告與定義分離,則可以在宣告或定義中給預設引數。
二,拷貝建構函式
1,定義:建立物件時使用同類物件來進行初始化。
2,特徵:a,本質是乙個建構函式的過載;
b,引數必須使用引用傳參;(使用值傳參會引起無窮遞迴呼叫)
c,若未顯示定義,系統會預設預設的拷貝建構函式,預設的拷貝建構函式會依次拷貝類成員進行初始化。
三,析構函式
1,定義:當乙個物件的生命週期結束時,c++編譯系統會自動呼叫成員函式析構函式。
2,特徵: a,函式名是類名前加上字元~;
b,無參無返回值;
c,乙個類有且只有乙個析構函式;
d,物件生命週期結束時,c++編譯系統自動呼叫;
e,並不是刪除物件,而是做一些清理工作。
四,賦值操作符過載
1,特徵: a,「operator+合法的運算子」構成函式名;
b,不改變運算子的優先順序等;
2,與拷貝建構函式相比:拷貝建構函式是建立新物件,使用已有物件來初始化新物件;而賦值運算子過載是對乙個已存在的物件進行拷貝賦值。
data d2 = d1; //呼叫拷貝建構函式
data d3 ;
data d3 = d1; //呼叫賦值操作符過載
注:五個不能過載的運算子:.* sizeof :: ?: .五,取位址操作符過載
class date
};
六,const修飾的取位址操作符過載
class date
};
下面所寫**主要是對以上所述問題的驗證:
#includeusing namespace std;
class plural
~plural() //析構函式
//plural(const plural& d) //拷貝建構函式
// plural(const plural& d) //拷貝建構函式(初始化列表)
:_real(d._real), _imaginary(d._imaginary)
plural& operator= (const plural& d) //賦值操作符過載
return *this;
} plural& operator+ (const plural& d) //加法過載
plural& operator- (const plural& d) //減法過載
plural operator* (const plural& d) //乘法過載
plural operator/ (const plural& d) //除法過載
plural& operator++() //前置++
plural operator++(int) //後置++
運算子過載 類的賦值運算子過載
下面介紹類的賦值運算子 1.c 中物件的記憶體分配方式 在c 中,物件的例項在編譯的時候,就需要為其分配記憶體大小,因此,系統都是在stack上為其分配記憶體的。這一點和c 完全不同!千 萬記住 在c 中,所有類都是reference type,要建立類的實體,必須通過new在heap上為其分配空間...
類和物件及類中的六個預設的函式
一 物件導向的三大特徵 1 封裝 2 繼承 3 多型 二 類和物件的區別 答 類是抽象的,物件是具體的,所以類不占用記憶體,而物件占用記憶體。三 類和struct的區別 1 struct中預設為public 2 類中預設為private 四 生成物件的2步 1 申請記憶體 2 使用建構函式進行初始化...
類的六個預設成員函式
類的六個預設成員函式 1.建構函式 2.拷貝建構函式 3.析構函式 4.賦值操作符過載 5.取位址操作符過載 6.const修飾的取位址操作符過載 建構函式 是乙個特殊的成員函式,名字與類名相同,建立類型別物件時,由編譯器自動呼叫,在物件的生命週期內隻且只呼叫一次,以保證每個資料成員都有乙個合適的初...