十年網(wǎng)站開發(fā)經(jīng)驗(yàn) + 多家企業(yè)客戶 + 靠譜的建站團(tuán)隊(duì)
量身定制 + 運(yùn)營維護(hù)+專業(yè)推廣+無憂售后,網(wǎng)站問題一站解決
C++語言程序設(shè)計(jì)網(wǎng)課
創(chuàng)新互聯(lián)專注于企業(yè)成都營銷網(wǎng)站建設(shè)、網(wǎng)站重做改版、邢臺(tái)縣網(wǎng)站定制設(shè)計(jì)、自適應(yīng)品牌網(wǎng)站建設(shè)、H5高端網(wǎng)站建設(shè)、商城網(wǎng)站建設(shè)、集團(tuán)公司官網(wǎng)建設(shè)、成都外貿(mào)網(wǎng)站制作、高端網(wǎng)站制作、響應(yīng)式網(wǎng)頁設(shè)計(jì)等建站業(yè)務(wù),價(jià)格優(yōu)惠性價(jià)比高,為邢臺(tái)縣等各大城市提供網(wǎng)站開發(fā)制作服務(wù)。
在對(duì)象被創(chuàng)建時(shí)使用特定的值構(gòu)造對(duì)象,將對(duì)象初始化為一個(gè)特定的初始狀態(tài)。
函數(shù)名與類名相同;不能返回值類型,不能有return語句;可以有形式參數(shù),也可以沒有形式參數(shù);可以是內(nèi)聯(lián)函數(shù);可以重載;可以帶默認(rèn)參數(shù)值;
在對(duì)象被創(chuàng)建時(shí)自動(dòng)調(diào)用
調(diào)用時(shí)可以不需要實(shí)參的構(gòu)造函數(shù):
如果程序中未定義構(gòu)造函數(shù),編譯器將在需要時(shí)自動(dòng)生成一個(gè)默認(rèn)構(gòu)造函數(shù)
如果類中已定義構(gòu)造函數(shù),默認(rèn)情況下編譯器就不再隱含生成默認(rèn)構(gòu)造函數(shù)
如果此時(shí)依然希望編譯器隱含生成默認(rèn)構(gòu)造函數(shù),可以使用"=default"
class Clock {
public:
Clock() = default;
Clock(int newH, int newM, int newS);
private:
int hour, minute, second;
}
類中往往有多個(gè)構(gòu)造函數(shù),只是參數(shù)表和初始化列表不同,其初始化算法都是相同的,這時(shí),為了避免代碼重復(fù),可以使用委托構(gòu)造函數(shù)
委托構(gòu)造函數(shù)使用類的其他構(gòu)造函數(shù)執(zhí)行初始化過程:
Clock::Clock(int newH, int newM, int newS):
hour(newH),minute(newM),second(newS){
}
Clock::Clock():Clock(0,0,0){}
用一個(gè)已經(jīng)存在的對(duì)象,去初始化新的對(duì)象
復(fù)制構(gòu)造函數(shù)是一種特殊的構(gòu)造函數(shù),其形參為本類的對(duì)象引用
class 類名 {
public:
類名 (形參);//構(gòu)造函數(shù)
類名 (const 類名&對(duì)象名);//復(fù)制構(gòu)造函數(shù)
// ...
};
類名::類(const 類名&對(duì)象名) //復(fù)制構(gòu)造函數(shù)
{ 函數(shù)體 }
若不希望對(duì)象被復(fù)制構(gòu)造:
C++98做法:
將復(fù)制構(gòu)造函數(shù)聲明為private,并且不提供函數(shù)實(shí)現(xiàn)
C++11做法:
用"=delete"指示編譯器不生成默認(rèn)復(fù)雜構(gòu)造函數(shù)
class Point { //Point類的定義
public:
Point (int xx = 0, int yy = 0) {x = xx; y = yy;} //構(gòu)造函數(shù) 內(nèi)聯(lián)
Point (const Point& p) = delete; //指示編譯器不生成默認(rèn)復(fù)制構(gòu)造函數(shù)
private:
int x, y; //私有數(shù)據(jù)
};
左值:位于復(fù)制運(yùn)算左側(cè)的對(duì)象或變量
右值:位于賦值運(yùn)算右側(cè)的值
對(duì)持久存在變量的引用稱為左值引用,用&表示
對(duì)短暫存在可被移動(dòng)的右值的引用稱之為右值引用,用&&表示
float n = 6;
float &lr_n = n;//左值引用
/*錯(cuò)誤*/float &&rr_n = n;//錯(cuò)誤,右值引用不能綁定到左值
float &&rr_n = n * n;//右值表達(dá)式綁定到右值引用
通過標(biāo)準(zhǔn)庫
float n = 10;
float &&rr_n = std::move(n);//將n轉(zhuǎn)化為右值
//使用move函數(shù)承諾除對(duì)n重新賦值或銷毀外,不以rr_n以外方式使用
基于右值引用,移動(dòng)構(gòu)造函數(shù)通過移動(dòng)數(shù)據(jù)方式構(gòu)造新對(duì)象,與復(fù)制構(gòu)造函數(shù)類似,移動(dòng)構(gòu)造函數(shù)參數(shù)為該類對(duì)象的右值引用:
#include
class astring {
public:
std::string s;
astring (astring&& o) noexcept: s(std::move(o.s))//顯式移動(dòng)所有成員
{/*函數(shù)體*/}
};
完成對(duì)象被刪除前的一些清理工作
在對(duì)象的生存期結(jié)束的時(shí)刻系統(tǒng)自動(dòng)調(diào)用它,然后釋放此對(duì)象所屬的空間;如果程序中未聲明析構(gòu)函數(shù),編譯器將自動(dòng)產(chǎn)生一個(gè)默認(rèn)的析構(gòu)函數(shù),其函數(shù)體為空。