c++的類有四種特殊成員函數(shù):
創(chuàng)新互聯(lián)建站專業(yè)為企業(yè)提供扎賚諾爾網(wǎng)站建設(shè)、扎賚諾爾做網(wǎng)站、扎賚諾爾網(wǎng)站設(shè)計(jì)、扎賚諾爾網(wǎng)站制作等企業(yè)網(wǎng)站建設(shè)、網(wǎng)頁設(shè)計(jì)與制作、扎賚諾爾企業(yè)網(wǎng)站模板建站服務(wù),十載扎賚諾爾做網(wǎng)站經(jīng)驗(yàn),不只是建網(wǎng)站,更提供有價(jià)值的思路和整體網(wǎng)絡(luò)服務(wù)。? 這些類的特殊成員函數(shù)負(fù)責(zé)創(chuàng)建、初始化、銷毀或者拷貝類的對(duì)象。
? 如果程序員沒有顯示的為類定義某個(gè)特殊成員函數(shù),而又需要用到該特殊成員函數(shù)時(shí),編譯器會(huì)隱式地為這個(gè)類生成一個(gè)默認(rèn)的特殊成員函數(shù);
? 而如果程序員顯示的定義了某個(gè)特殊成員函數(shù),編譯器將不會(huì)自動(dòng)為你生成默認(rèn)的構(gòu)造函數(shù)了,如果還想用默認(rèn)構(gòu)造函數(shù),就需要自己手寫,如果變量很多的話這將會(huì)很麻煩。
? c++11標(biāo)準(zhǔn)因此引入了新特性:default函數(shù)。程序員只需在函數(shù)聲明后加上”=default;”,就可將該函數(shù)聲明為defaulted函數(shù),編譯器將為顯式聲明的defaulted函數(shù)自動(dòng)生成函數(shù)體。
? defaulted函數(shù)特性僅適用于類的特殊成員函數(shù),且該特殊成員函數(shù)沒有默認(rèn)參數(shù)。
? defaulted函數(shù)既可以在類體里(inline)定義,也可以在類體外(out-of-line)定義。
來看一個(gè)簡(jiǎn)單的例子:
例子來源
class Student
{int ID;
std::string sName;
};
Student s1;
Student s2(s1);
在不定義任何構(gòu)造函數(shù)的情況下,Student對(duì)象能定義成功,因?yàn)榫幾g器會(huì)默認(rèn)為我們?cè)O(shè)置幾個(gè)構(gòu)造函數(shù),多的不說了,就說最簡(jiǎn)單的兩個(gè)
Student() {}
Student(const Student& o):ID(o.ID),sName(o.sName)
{}
一個(gè)是在不提供任何參數(shù)的情況下的默認(rèn)構(gòu)造函數(shù),另一個(gè)是通過另一個(gè)對(duì)象構(gòu)造的拷貝構(gòu)造函數(shù)。
class Student
{int ID;
std::string sName;
public:
Student(const string& _sName):sName(_sName){}
};
Student s1;
Student s2(s1);
但是如果我們自己加了一個(gè)只指定名字參數(shù)的構(gòu)造函數(shù),上面這段代碼就編譯不過了。因?yàn)榫幾g器就不自動(dòng)為你生成默認(rèn)的那些構(gòu)造函數(shù)了,因?yàn)樗X得你想根據(jù)自己的需求定義構(gòu)造函數(shù)。但是,如果你除了自己自定義的構(gòu)造函數(shù),還想用編譯器為你生成默認(rèn)的,怎么辦?
class Student
{int ID;
std::string sName;
public:
Student() {}
Student(const Student& o) :ID(o.ID), sName(o.sName)
{}
Student(const string& _sName):sName(_sName){}
};
傳統(tǒng)的辦法就是受點(diǎn)累,把編譯器為你生成的那兩個(gè)你親自寫一遍,這樣不累嗎?尤其是student成員變量很多的時(shí)候。有了default關(guān)鍵以后,省事多了,
class Student
{int ID;
std::string sName;
public:
Student() = default;
Student(const Student& o) = default;
Student(const string& _sName):sName(_sName){}
};
Student s1;
Student s2(s1);
那兩個(gè)默認(rèn)的構(gòu)造函數(shù),我們想要的實(shí)現(xiàn)跟編譯器默認(rèn)的一模一樣,直接指定個(gè)default就行了,不用全部手打出來。這就是default這個(gè)關(guān)鍵字的作用。
完整的例子如下所示:
class x2
{public:
x2() = default; //inline(類內(nèi)) defaulted 默認(rèn)構(gòu)造函數(shù)
x2(const x2&);
x2& operator=(const x2&);
~x2() = default; //inline(類內(nèi)) defaulted 析構(gòu)函數(shù)
};
x2::x2(const x2&) = default; // 類外 拷貝構(gòu)造函數(shù)
x2& x2::operator=(const x2&) =default; //類外 拷貝賦值操作符
delete的用處同樣的對(duì)于上面的例子中,如果你不想讓諸如:
Student s1;
Student s2(s1);
這樣的默認(rèn)構(gòu)造函數(shù)被調(diào)用,除了寫顯示的特殊函數(shù),讓編譯器為你排除掉,還可以通過=delete
函數(shù)特性來為你禁用某些函數(shù)
例如:
class x5
{public:
// 禁用類的new操作符
void *operator new(size_t) = delete;
void *operator new[](size_t) = delete;
}
x5 *pa = new x5; // 錯(cuò)誤
x5 *pb = new x5[10]; // 錯(cuò)誤
你是否還在尋找穩(wěn)定的海外服務(wù)器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機(jī)房具備T級(jí)流量清洗系統(tǒng)配攻擊溯源,準(zhǔn)確流量調(diào)度確保服務(wù)器高可用性,企業(yè)級(jí)服務(wù)器適合批量采購,新人活動(dòng)首月15元起,快前往官網(wǎng)查看詳情吧
網(wǎng)站題目:C++11——“=default“和“=delete“函數(shù)特性-創(chuàng)新互聯(lián)
文章分享:http://jinyejixie.com/article44/dedoee.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供微信公眾號(hào)、軟件開發(fā)、靜態(tài)網(wǎng)站、響應(yīng)式網(wǎng)站、網(wǎng)站維護(hù)、建站公司
聲明:本網(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)
猜你還喜歡下面的內(nèi)容