類的六大預設成員函式
1. 建構函式
如果類的成員變數為私有的,要對這些成員初始化必須呼叫一個共有的成員函式來進行.
這個共有的成員函式在定義物件的同時會自動執行一次,被呼叫的函式稱為建構函式.
建構函式的特點:
1.函式名與類名相同.
2. 無返回值.
3.建構函式可以過載.
4.例項化物件時,系統呼叫相應的建構函式.
5.建構函式可以在類中定義,也可以在內外定義.
6.沒有自定義建構函式,系統會給出預設的建構函式(預設的建構函式).
7無參的建構函式和全預設建構函式統認為是預設建構函式,預設函式只能出現一個.
2.拷貝(複製)建構函式
用一個已存在的物件初始化一個正在建立的物件,呼叫的建構函式就是拷貝建構函式。
Date(const Date &d)
:_year(d._year)
,_month(d._month)
,_day(d._day)
{
}
拷貝建構函式的特點:
1.拷貝建構函式是建構函式的過載.
2.拷貝建構函式的引數必須是引用,不能是值傳遞,負責會引發無窮遞迴.
原因:實參給形參傳值會經過一箇中間物件,而給中間物件傳值又要經過一箇中間物件......以此類推就會引發無窮遞迴.
3.如果沒有自定義拷貝建構函式,系統會給出預設的預設拷貝建構函式.
3.解構函式
當一個物件的生命週期結束時,系統會自動呼叫一個成員函式,這個成員函式就是解構函式.
1.解構函式在類名前加上~。
2.解構函式無返回值.
3.解構函式沒有引數.
4.解構函式不能過載.
5.建構函式被呼叫幾次,解構函式就呼叫幾次.
6.解構函式體內並不是刪除了當前作用的物件,而是做了一些清理工作.
7.沒有自定義解構函式,系統會給出預設的解構函式.
運算子過載特點:
1.operator+ 合法的運算子構成函式名.
2.過載運算子以後,不能改變運算子的優先順序、結合性、運算元個數.
3.
運算子函式的引數至少有一個必須是類的物件或者類的物件的引用。這種規定可以防止改變內建型別的函義。
以下5個不能過載的運算子:
. (成員訪問運算子) .*(指標訪問運算子) :: (與運算子) sizeof (大小運算子) ?: (條件運算子)
4. 賦值運算子過載
對一個已經存在的物件進行拷貝賦值(與拷貝建構函式不同).
Date& operator=(const Date &d)
{
if(this!=&d)
{
_year=d._year;
_month=d._month;
_day =d._day;
}
return *this;
}
5.取地址運算子過載
Date* operator &()
{
return this;
}
6.const修飾的取地址運算子過載
const Date * operator& () const
{
return this;
}