類的六個(gè)默認(rèn)成員函數(shù):構(gòu)造函數(shù)、拷貝構(gòu)造函數(shù)、析構(gòu)函數(shù)、賦值操作符重載、取地址的操作符重載、const修飾的取地址操作符重載。

網(wǎng)站建設(shè)哪家好,找創(chuàng)新互聯(lián)!專注于網(wǎng)頁設(shè)計(jì)、網(wǎng)站建設(shè)、微信開發(fā)、小程序開發(fā)、集團(tuán)企業(yè)網(wǎng)站建設(shè)等服務(wù)項(xiàng)目。為回饋新老客戶創(chuàng)新互聯(lián)還提供了武城免費(fèi)建站歡迎大家使用!
1.【構(gòu)造函數(shù)】
成員變量為私有的,要對(duì)它們進(jìn)行初始化,必須用一個(gè)公有成員函數(shù)來進(jìn)行。同時(shí)這個(gè)函數(shù)應(yīng)該有且僅在定義對(duì)象時(shí)自動(dòng)執(zhí)行一次,這時(shí)
調(diào)用的函數(shù)稱為構(gòu)造函數(shù)(constructor) 。
構(gòu)造函數(shù)是特殊的成員函數(shù),其特征如下:
1. 函數(shù)名與類名相同。
2. 無返回值。
3. 對(duì)象構(gòu)造(對(duì)象實(shí)例化)時(shí)系統(tǒng)自動(dòng)調(diào)用對(duì)應(yīng)的構(gòu)造函數(shù)。
4. 構(gòu)造函數(shù)可以重載。
5. 構(gòu)造函數(shù)可以在類中定義,也可以在類外定義。
6. 如果類定義中沒有給出構(gòu)造函數(shù),則C++編譯器自動(dòng)產(chǎn)生一個(gè)缺省的構(gòu)造函數(shù),但只要我們定義了一個(gè)構(gòu)造函數(shù),系統(tǒng)就不會(huì)自動(dòng)
生成缺省的構(gòu)造函數(shù)。
7. 無參的構(gòu)造函數(shù)和全缺省值的構(gòu)造函數(shù)都認(rèn)為是缺省構(gòu)造函數(shù),并且缺省的構(gòu)造函數(shù)只能有一個(gè)。
class Date
{
public:
// 1.無參構(gòu)造函數(shù)
Date ()
{}
// 2.帶參構(gòu)造函數(shù)
Date (int year, int month , int day )
{
_year = year ;
_month = month ;
_day = day ;
}
private:
int _year ;
int _month ;
int _day ;
};
void TestDate1 ()
{
Date d1 ; // 調(diào)用無參構(gòu)造函數(shù)
Date d2 (2015, 1, 1); // 調(diào)用帶參的構(gòu)造函數(shù)
}2.【拷貝構(gòu)造函數(shù)】
創(chuàng)建對(duì)象時(shí)使用同類對(duì)象來進(jìn)行初始化,這時(shí)所用的構(gòu)造函數(shù)稱為拷貝構(gòu)造函數(shù)(Copy Constructor),拷貝構(gòu)造函數(shù)是特殊的構(gòu)造函
數(shù)。
特征:
1. 拷貝構(gòu)造函數(shù)其實(shí)是一個(gè)構(gòu)造函數(shù)的重載。
2. 拷貝構(gòu)造函數(shù)的參數(shù)必須使用引用傳參,使用傳值方式會(huì)引發(fā)無窮遞歸調(diào)用。
3. 若未顯示定義,系統(tǒng)會(huì)默認(rèn)缺省的拷貝構(gòu)造函數(shù)。缺省的拷貝構(gòu)造函數(shù)會(huì),依次拷貝類成員進(jìn)行初始化。
class Date
{
public :
Date()
{}
// 拷貝構(gòu)造函數(shù)
Date (const Date& d)
{
_year = d ._year;
_month = d ._month;
_day = d ._day;
}
private :
int _year ;
int _month ;
int _day ;
};
void TestDate1 ()
{
Date d1
Date d2 (d1); // 調(diào)用拷貝構(gòu)造函數(shù)
}3.【析構(gòu)函數(shù)】
當(dāng)一個(gè)對(duì)象的生命周期結(jié)束時(shí),C++編譯系統(tǒng)會(huì)自動(dòng)調(diào)用一個(gè)成員函數(shù),這個(gè)特殊的成員函數(shù)即析構(gòu)函數(shù)(destructor)
構(gòu)造函數(shù)是特殊的成員函數(shù),其特征如下:
1. 析構(gòu)函數(shù)在類名加上字符~。
2. 析構(gòu)函數(shù)無參數(shù)無返回值。
3. 一個(gè)類有且只有一個(gè)析構(gòu)函數(shù)。若未顯示定義,系統(tǒng)會(huì)自動(dòng)生成缺省的析構(gòu)函數(shù)。
4. 對(duì)象生命周期結(jié)束時(shí),C++編譯系統(tǒng)系統(tǒng)自動(dòng)調(diào)用析構(gòu)函數(shù)。
5. 注意析構(gòu)函數(shù)體內(nèi)并不是刪除對(duì)象,而是做一些清理工作。
class Date
{
public :
// 析構(gòu)函數(shù)
~Date()
{}
private :
int _year ;
int _month ;
int _day ;
};4.【賦值運(yùn)算符重載】
1、拷貝構(gòu)造函數(shù)是創(chuàng)建的對(duì)象,使用一個(gè)已有對(duì)象來初始化這個(gè)準(zhǔn)備創(chuàng)建的對(duì)象。
2、賦值運(yùn)算符的重載是對(duì)一個(gè)已存在的對(duì)象進(jìn)行拷貝賦值。
class Date
{
public :
Date()
{}
// 拷貝構(gòu)造函數(shù)
Date (const Date& d)
: _year(d._year)
, _month(d._month)
, _day(d._day)
{}
// 賦值操作符的重載
Date& operator = (const Date& d)
{
if (this != &d)
{
this->_year = d. _year;
this->_month = d. _month;
this->_day = d. _day;
}
return *this ;
}
private:
int _year ;
int _month ;
int _day ;
};
void Test ()
{
Date d1 ;
Date d2 = d1; // 調(diào)用拷貝構(gòu)造函數(shù)
Date d3 ;
d3 = d1 ; // 調(diào)用賦值運(yùn)算符的重載
}操作符重載實(shí)現(xiàn)的加減乘除
Date operator= (const Date &g)
{
if (this != &g)
{
_year=g._year;
_month=g._month;
_day=g._day;
}
return *this;
}
Date operator+ (const Date g)
{
Date d;
d._year = _year + g._year;
d._month = _month + g._month;
d._day = _day + g._day;
return d;
}
Date operator+= (const Date g)
{
_year += g._year;
_month += g._month;
_day += g._day;
return *this;
}
Date operator-(const Date g)
{
Date d;
d._year=_year-g._year;
d._month=_month-g._month;
d._day=_day-g._day;
return d;
}在C++中比較常用的就是以上四個(gè)默認(rèn)成員函數(shù),我們?cè)谑煜ち艘陨纤膫€(gè)默認(rèn)函數(shù)的特點(diǎn)和用法之后,我們可以練習(xí)實(shí)現(xiàn)一個(gè)復(fù)數(shù)類。
class Complex
{
public:
Complex()
{}//無參構(gòu)造函數(shù)
Complex(int real,int empty)
{
_real=real;
_empty=empty;
}//帶參構(gòu)造函數(shù)
Complex (const Complex& g)
{
_real=g._real;
_empty=g._empty;
}//拷貝構(gòu)造函數(shù)
void Display()
{
cout<<"real:"<< _real<<"empty:"<< _empty<<endl;
}
~Complex()
{
cout<<"~Complex()"<<endl;
}//析構(gòu)函數(shù)
Complex operator+ (const Complex g)
{
Complex d;
d._real=_real+g._real;
d._empty=_empty+g._empty;
return d;
}//賦值操作符重載函數(shù)
private:
int _real;
int _empty;
};
int main()
{
Complex c(10,5);
Complex e(c);
e.Display();
c.Display();
Complex g;
g=c+e;
g.Display();
return 0;
}
分享文章:類的默認(rèn)成員函數(shù)
地址分享:http://chinadenli.net/article12/pgjggc.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站收錄、電子商務(wù)、外貿(mào)網(wǎng)站建設(shè)、網(wǎng)站設(shè)計(jì)、自適應(yīng)網(wǎng)站、域名注冊(cè)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)