1. 程式人生 > >類的六大預設成員函式

類的六大預設成員函式

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;

}