1. 程式人生 > >c++建構函式,拷貝建構函式,解構函式,賦值運算子過載

c++建構函式,拷貝建構函式,解構函式,賦值運算子過載

建構函式:

       是一個特殊的成員函式,名字與類名相同,建立類型別物件時,由編譯器自動呼叫,在物件的生命週期內只且只調用一次,以保證每個資料成員都有一個合適的初始值。
<strong><span style="font-size:24px;color:#009900;">class Cdate
{
public:
    Cdate(int year,int month, int day)
    {
          _year = year;
          _month = month;
          _day = day;
    }
private:
    int _year;
    int _month;
    int _day;
}</span></strong>

建構函式特點: 1.函式名和類名相同; 2.沒有返回值; 3.不能用const修飾;

拷貝建構函式:

       只有單個形參,而且該形參是對本類型別物件的引用(常用const修飾),這樣的建構函式稱為拷貝建構函式。拷貝建構函式是特殊的建構函式,建立物件時使用已存在的同類物件來進行初始化,由編譯器自動呼叫。
class CDate
{
public:
    CDate()
    {}
CDate( const int year, const int month, const int day)
{
    _iYear = year;
    _iMonth = month;
    _iDay = day;
}
CDate( const CDate& date)
{
    _iYear = date._iYear;
    _iMonth = date._iMonth;
    _iDay = date._iDay;
}
    private:
    int _iYear;
    int _iMonth;
    int _iDay;
};
1、它是建構函式的過載。
2、它的引數必須使用同類型物件的引用傳遞。
3、如果沒有顯式定義,系統會自動合成一個預設的拷貝建構函式。預設的拷貝建構函式
會依次拷貝類的資料成員完成初始化。
【使用場景】
1、物件例項化物件
2、傳值方式作為函式的引數
3、傳值方式作為函式返回值(return data)

解構函式:

       解構函式:與建構函式功能相反,在物件被銷燬時,由編譯器自動呼叫,完成類的一些資源清理和汕尾工作。
class CArray
{
public:
CArray(size_t capacity)
: _capacity(capacity)
{
_pData = ( int*)malloc(capacity*sizeof (int));
_size = 0;
}
~CArray()
{
if (NULL != _pData)
{
free(_pData);
_pData = NULL;
}
_size = 0;
_capacity = 0;
}
private:
int* _pData;
size_t _size;
size_t _capacity;
};
a、解構函式在類名(即建構函式名)加上字元~。
b、解構函式無引數無返回值。
c、一個類有且只有一個解構函式。若未顯示定義,系統會自動生成預設的解構函式。
d、物件生命週期結束時,C++編譯系統系統自動呼叫解構函式。
e、注意解構函式體內並不是刪除物件,而是做一些清理工作。

賦值運算子過載:

使用過載操作符,可以令程式更自然、更直觀,而濫用操作符過載會使得類難以理解,在實踐中很少發生明顯的操作符過載濫用。但有些程式設計師會定義operator+來執行減法操作,當一個過載操作符不明確時,給操作符取一個名字更好,對於很少用的操作,使用命名函式通常比用操作符好,如果不是普通操作,沒有必要為簡潔而用操作符。