類的六個預設成員函式:
1.建構函式
2.拷貝建構函式
3.析構函式
4.賦值操作符過載
5.取位址操作符過載
6.const修飾的取位址操作符過載
建構函式:是乙個特殊的成員函式,名字與類名相同,建立類型別物件時,由編譯器自動呼叫,在物件的生命週期內隻且只呼叫一次,以保證每個資料成員都有乙個合適的初始值。
公有成員函式,僅在定義物件時自動執行一次。
特點:
1.函式名與類名相同。
2.物件構造時自動呼叫。
3.無返回值。
4.可以過載。
5.可以在類內外定義。
6.如果無建構函式,編譯器自動產生乙個預設的建構函式。
7.無參和全預設值的建構函式都認為是預設建構函式,並且預設建構函式之能有乙個。
如下例:
class
cdate
cdate(int
year,int
month,int
day)
private:
int _year;
int _month;
int _day;
}
初始化列表:以乙個冒號開始,接著是乙個以逗號分隔的資料成員列表,每個資料成員後面跟乙個放在圓括號中的初始化式。
類中包含以下成員必須要放在初始化列表中初始化:
1.引用資料成員
2.const資料成員
3.類型別成員
初始化舉例:
class
cdate
private:
int _year;
int _month;
int _day;
}
拷貝建構函式:只有單個形參,而且該形參是對本類型別物件的引用(常用const修飾的)。
舉例作用:建立物件時使用同類物件來進行初始化。 cdate(const cdate&date)
特點:
1.是建構函式的乙個過載。
2.必須使用引用傳參,傳值會無窮遞迴呼叫。
3.未定義時,編譯器會自動生成乙個預設預設拷貝建構函式,預設的拷貝建構函式會依次拷貝類成員進行初始化。 如下:
class
cdate
cdate(int
year,int
month,int
day)
cdate(const
cdate&date)
private:
int _year;
int _month;
int _day;
};
析構函式~date()
作用:在物件宣告週期結束時,呼叫的函式。(清除類本身分配的資源);
特點:
1.函式名在類名前加上~;
2.無引數無返回值;
3.乙個類只能有乙個析構函式,若未定義,系統預設生成析構函式;
4.自動呼叫;
5.析構函式並非刪除物件,而是做一些清理工作(釋放空間);
class array()
~array()//析構函式 清理工作
_size=0;
_capacity=0;
}private:
int *_ptr;
size_t _size;
size_t _capaticy;
}
class
date
date& operator=(const
date& d)
return *this;
}
若定義了友元函式時:友元函式可以訪問類的私有成員。
友元函式: friend
1.友元函式可以直接訪問類的私有成員,是定義在類外的函式。
2.友元函式不屬於類的成員函式,但需要在類內宣告(可以在類內的任何地方宣告,所以友元函式不受訪問限定符的限制),宣告時要加上關鍵字friend。
友元類:
整個類都可以是另乙個類的友元函式,都可訪問另乙個類中的成員。
class time
;class date
;
友元關係是單向的,不具有交換性。
友元關係無法傳遞。
友元關係無法繼承。
取位址操作符過載: date * operator&();
類的靜態成員
1.static修飾的成員,稱為靜態類成員。
2.類的靜態成員被該型別的所有物件所共享。
3.靜態成員函式不會生成this指標,所以可以使用型別::作用域訪問符呼叫靜態成員函式。
類的六個預設成員函式
如果乙個類中什麼成員都沒有,則就是空類。但是空類中什麼都沒有嗎?其實並不是這樣的,任何類在我們不寫的情況下,都會自動生成下面六個預設成員函式。class date 無參的建構函式 date int year,int month,int day 有參的建構函式 這兩個建構函式構成了函式的過載,因為它們...
類的六個預設成員函式總結(一)
類有六個預設成員函式 今天我們來看一下前三個 一 建構函式 什麼是建構函式呢?看下圖 如圖 建構函式的特性有 1.函式名與類名相同 2.沒有返回值 3.有初始化列表 可以不用 4.新物件被建立,由編譯器自動呼叫,且在物件的生命週期內僅呼叫一次 5.建構函式可以過載,實參決定了呼叫哪個建構函式 6.如...
C 之類的六個預設成員函式
在c 類中同樣的預設成員函式一共有六個,即使使用者不定義,編譯器也可以給出。分別為 1 建構函式 2 析構函式 3 拷貝建構函式 4 賦值運算 5 取位址運算 6 const取位址運算 我們一下述程式為例驗證下上面說法 include using namespace std class comple...