国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

【C++】C++11類的新功能

這篇具有很好參考價(jià)值的文章主要介紹了【C++】C++11類的新功能。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

【C++】C++11類的新功能,C++,c++,開發(fā)語(yǔ)言

??樊梓慕:個(gè)人主頁(yè)

???個(gè)人專欄:《C語(yǔ)言》《數(shù)據(jù)結(jié)構(gòu)》《藍(lán)橋杯試題》《LeetCode刷題筆記》《實(shí)訓(xùn)項(xiàng)目》《C++》《Linux》《算法》

??每一個(gè)不曾起舞的日子,都是對(duì)生命的辜負(fù)


目錄

前言

默認(rèn)成員函數(shù)

類成員變量初始化

強(qiáng)制生成默認(rèn)函數(shù)的關(guān)鍵字default

禁止生成默認(rèn)函數(shù)的關(guān)鍵字delete

final 和 override 關(guān)鍵字

final

override


前言

在C++11中,類增加了2個(gè)新的默認(rèn)成員函數(shù),沒(méi)錯(cuò)就是我們上一篇?jiǎng)倓倢W(xué)習(xí)的移動(dòng)構(gòu)造與移動(dòng)賦值,并且新增了一些功能,比如default、delete、final和override等關(guān)鍵字,讓我們一起來(lái)探討一下吧!


歡迎大家??收藏??以便未來(lái)做題時(shí)可以快速找到思路,巧妙的方法可以事半功倍。?

=========================================================================文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-854746.html

GITEE相關(guān)代碼:??樊飛 (fanfei_c) - Gitee.com??

=========================================================================


默認(rèn)成員函數(shù)

原有的默認(rèn)成員函數(shù):

  • 構(gòu)造函數(shù)
  • 析構(gòu)函數(shù)
  • 拷貝構(gòu)造函數(shù)
  • 拷貝賦值重載
  • 取地址重載
  • const取地址重載

需要復(fù)習(xí)的小伙伴們自取

【C++】類和對(duì)象(中)之構(gòu)造函數(shù)與析構(gòu)函數(shù)http://t.csdnimg.cn/ds8up【C++】類和對(duì)象(中)之拷貝構(gòu)造與運(yùn)算符、操作符重載http://t.csdnimg.cn/XWAA5


C++11在原有6個(gè)默認(rèn)成員函數(shù)的基礎(chǔ)上,新增了2個(gè):『 移動(dòng)構(gòu)造函數(shù)』和『 移動(dòng)賦值重載』。


默認(rèn)移動(dòng)構(gòu)造和移動(dòng)賦值的生成條件

  • 移動(dòng)構(gòu)造函數(shù)的生成條件:沒(méi)有自己實(shí)現(xiàn)移動(dòng)構(gòu)造函數(shù),并且沒(méi)有自己實(shí)現(xiàn)析構(gòu)函數(shù)、拷貝構(gòu)造函數(shù)和拷貝賦值函數(shù)。
  • 移動(dòng)賦值重載函數(shù)的生成條件:沒(méi)有自己實(shí)現(xiàn)移動(dòng)賦值重載函數(shù),并且沒(méi)有自己實(shí)現(xiàn)析構(gòu)函數(shù)、拷貝構(gòu)造函數(shù)和拷貝賦值函數(shù)。

思考:為什么這里析構(gòu)函數(shù)、拷貝構(gòu)造函數(shù)和拷貝賦值函數(shù)在一起說(shuō)?

在實(shí)際的類中,這些要寫就都寫,?不會(huì)出現(xiàn)只實(shí)現(xiàn)其中一個(gè)的情況,因?yàn)橹挥猩婕暗缴羁截惖念惒判枰约簩?shí)現(xiàn)這三個(gè)默認(rèn)成員函數(shù),其他值拷貝的類用默認(rèn)生成的就行了。

也就是說(shuō),移動(dòng)構(gòu)造和移動(dòng)賦值的生成條件與之前六個(gè)默認(rèn)成員函數(shù)不同,并不是單純的沒(méi)有實(shí)現(xiàn)移動(dòng)構(gòu)造和移動(dòng)賦值編譯器就會(huì)默認(rèn)生成。

注意: 如果我們自己實(shí)現(xiàn)了移動(dòng)構(gòu)造或者移動(dòng)賦值,就算沒(méi)有實(shí)現(xiàn)拷貝構(gòu)造和拷貝賦值,編譯器也不會(huì)生成默認(rèn)的拷貝構(gòu)造和拷貝賦值。

思考:為什么我們實(shí)現(xiàn)了移動(dòng)語(yǔ)義,編譯器就不會(huì)默認(rèn)生成拷貝構(gòu)造和拷貝賦值了?

因?yàn)樾枰獙?shí)現(xiàn)移動(dòng)語(yǔ)義的類,往往需要我們自主實(shí)現(xiàn)拷貝構(gòu)造和拷貝賦值,還記得么:深拷貝的類才需要移動(dòng)構(gòu)造和移動(dòng)賦值,所以往往需要實(shí)現(xiàn)移動(dòng)語(yǔ)義的類,都會(huì)實(shí)現(xiàn)拷貝構(gòu)造和拷貝賦值的。


類成員變量初始化

默認(rèn)生成的構(gòu)造函數(shù),對(duì)于自定義類型的成員會(huì)調(diào)用其構(gòu)造函數(shù)進(jìn)行初始化,但并不會(huì)對(duì)內(nèi)置類型的成員進(jìn)行處理。于是C++11支持非靜態(tài)成員變量在聲明時(shí)進(jìn)行初始化賦值,默認(rèn)生成的構(gòu)造函數(shù)會(huì)使用這些缺省值對(duì)成員進(jìn)行初始化。比如:

class Person
{
public:
?? ?//...
private:
?? ?//非靜態(tài)成員變量,可以在成員聲明時(shí)給缺省值
?? ?F::string _name = "樊梓慕"; 
?? ?int _age = 20; ? ? ? ? ? 
?? ?static int _n; //靜態(tài)成員變量不能給缺省值
};

強(qiáng)制生成默認(rèn)函數(shù)的關(guān)鍵字default

C++11可以讓我們更好的控制要使用的默認(rèn)成員函數(shù),假設(shè)在某些情況下我們需要使用某個(gè)默認(rèn)成員函數(shù),但是因?yàn)槟承┰驅(qū)е聼o(wú)法生成這個(gè)默認(rèn)成員函數(shù),這時(shí)可以使用default關(guān)鍵字強(qiáng)制生成某個(gè)默認(rèn)成員函數(shù)。

比如:我們提供了拷貝構(gòu)造函數(shù),就不會(huì)生成默認(rèn)移動(dòng)構(gòu)造了,那么我們可以使用default關(guān)鍵字強(qiáng)制生成移動(dòng)構(gòu)造。

class Person
{
public:
	Person(const char* name = "", int age = 0)
		:_name(name)
		, _age(age)
	{}
	Person(const Person& p)
		:_name(p._name)
		, _age(p._age)
	{}
	Person(Person&& p) = default;
private:
	F::string _name;
	int _age;
};
int main()
{
	Person s1;
	Person s2 = s1;
	Person s3 = std::move(s1);
	return 0;
}

又比如,下面的Person類中實(shí)現(xiàn)了拷貝構(gòu)造函數(shù):

class Person
{
public:
?? ?//拷貝構(gòu)造函數(shù)
?? ?Person(const Person& p)
?? ??? ?:_name(p._name)
?? ??? ?, _age(p._age)
?? ?{}
private:
?? ?F::string _name; 
?? ?int _age; ? ? ?
};

這時(shí)如下代碼就無(wú)法編譯成功了,因?yàn)镻erson類中編寫了拷貝構(gòu)造函數(shù),導(dǎo)致無(wú)法生成默認(rèn)的構(gòu)造函數(shù),因?yàn)槟J(rèn)構(gòu)造函數(shù)生成的條件是沒(méi)有構(gòu)造函數(shù),而拷貝構(gòu)造函數(shù)是一種特殊的構(gòu)造函數(shù)。

int main()
{
?? ?Person s; //沒(méi)有合適的默認(rèn)構(gòu)造函數(shù)可用

?? ?return 0;
}

這時(shí)我們就可以使用default關(guān)鍵字強(qiáng)制生成默認(rèn)的構(gòu)造函數(shù),如下:

class Person
{
public:
?? ?Person() = default; //強(qiáng)制生成默認(rèn)構(gòu)造函數(shù)

?? ?//拷貝構(gòu)造函數(shù)
?? ?Person(const Person& p)
?? ??? ?:_name(p._name)
?? ??? ?, _age(p._age)
?? ?{}
private:
?? ?F::string _name; 
?? ?int _age; ? ? ? ?
};

注意: 默認(rèn)成員函數(shù)都可以用default關(guān)鍵字強(qiáng)制生成,包括移動(dòng)構(gòu)造和移動(dòng)賦值。


禁止生成默認(rèn)函數(shù)的關(guān)鍵字delete

當(dāng)我們不希望某些默認(rèn)函數(shù)生成時(shí),比如某個(gè)類不期望被拷貝怎么辦呢?

在C++98中,我們可以私有化拷貝構(gòu)造的聲明,占住拷貝構(gòu)造的地即可,目的是為了不讓編譯器默認(rèn)生成,注意無(wú)需實(shí)現(xiàn)拷貝構(gòu)造定義。

在C++11中,我們可以在該函數(shù)聲明后面加上=delete,表示讓編譯器不生成該函數(shù)的默認(rèn)版本,我們將=delete修飾的函數(shù)稱為『 刪除函數(shù)』。

class Person
{
public:
	Person(const char* name = "", int age = 0)
		:_name(name)
		, _age(age)
	{}
	Person(const Person& p) = delete;
private:
	bit::string _name;
	int _age;
};
int main()
{
	Person s1;
	Person s2 = s1;
	Person s3 = std::move(s1);
	return 0;
}

final 和 override 關(guān)鍵字

final

1.修飾虛函數(shù),表示該虛函數(shù)不能再被重寫;

class Car
{
public:
?? ?virtual void Drive() final {}
};
class Benz :public Car
{
public:
?? ?virtual void Drive() { cout << "Benz-舒適" << endl; } //err
};

【C++】C++11類的新功能,C++,c++,開發(fā)語(yǔ)言

2.修飾類,該類不能被繼承

【C++】C++11類的新功能,C++,c++,開發(fā)語(yǔ)言


override

override的作用是讓編譯器幫助用戶檢查子類虛函數(shù)是否重寫了父類某個(gè)虛函數(shù),如果沒(méi)有重寫編譯報(bào)錯(cuò),override作用發(fā)生在編譯時(shí)。

class Car {
public:
?? ?virtual void Drive() {}
};
class Benz :public Car
{
public:
?? ?virtual void Drive() override { cout << "Benz-舒適" << endl; }
};

?=========================================================================

如果你對(duì)該系列文章有興趣的話,歡迎持續(xù)關(guān)注博主動(dòng)態(tài),博主會(huì)持續(xù)輸出優(yōu)質(zhì)內(nèi)容

??博主很需要大家的支持,你的支持是我創(chuàng)作的不竭動(dòng)力??

??~ 點(diǎn)贊收藏+關(guān)注 ~??

=========================================================================

到了這里,關(guān)于【C++】C++11類的新功能的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 三星泄露微軟 Copilot 新功能:用自然語(yǔ)言操控各種功能

    三星泄露微軟 Copilot 新功能:用自然語(yǔ)言操控各種功能

    3 月 11 日消息,微軟計(jì)劃本月晚些時(shí)候發(fā)布新款 Surface 電腦和適用于?Windows 11?的 Copilot 新功能,但三星似乎等不及了,在其即將推出的 Galaxy Book4 系列產(chǎn)品宣傳材料中泄露了一些即將到來(lái)的 Copilot 功能。 三星官網(wǎng)上發(fā)布的圖片證實(shí)了此前關(guān)于微軟正為其人工智能助手 Copilo

    2024年04月09日
    瀏覽(30)
  • 官宣Windows11十月的Moment 1來(lái)了,新功能!附官方ISO鏡像(簡(jiǎn)/繁/英)

    官宣Windows11十月的Moment 1來(lái)了,新功能!附官方ISO鏡像(簡(jiǎn)/繁/英)

    一個(gè)月前(2022年9月)微軟正式發(fā)布了Windows 11的年度大更新——22H2版本(Build 22621.382),過(guò)了沒(méi)幾天當(dāng)月又推出了Build 22621.525的ISO鏡像。給人一種特別操之過(guò)急的感覺(jué)~ 前天微軟又向MVS訂閱用戶推送了10月份的累積更新的ISO鏡像,系統(tǒng)版本號(hào)Build 22621.674。Windows11也是維持著每

    2024年02月06日
    瀏覽(26)
  • Visual Studio 2022的一個(gè)驚艷新功能開發(fā)隧道

    在visual studio開發(fā)H5網(wǎng)站的調(diào)試時(shí)候,需要在多環(huán)境調(diào)試,比如在不同瀏覽器和不同分辨率的電腦、不同的手機(jī)瀏覽器測(cè)試。或者項(xiàng)目比較著急,需要邊測(cè)試邊開發(fā),可不可以不發(fā)布讓測(cè)試人員來(lái)測(cè)試呢?visual studio 2022在17.5版本推出了開發(fā)隧道(Dev Tunnels)的功能,就是可以解

    2024年02月06日
    瀏覽(19)
  • 借助生成式 AI 提升鴻蒙 APP 開發(fā)體驗(yàn)?試試 AutoDev 新功能

    借助生成式 AI 提升鴻蒙 APP 開發(fā)體驗(yàn)?試試 AutoDev 新功能

    生成式 AI 在軟件研發(fā)和知識(shí)管理上,有著非常大的潛力,也因此這項(xiàng)技術(shù)被越來(lái)越多的企業(yè)所采用。而在一些新興的技術(shù)上,諸如于鴻蒙操作系統(tǒng),它帶來(lái)了一些新 的理念、開發(fā)工具 DevEco Studio、新的語(yǔ)言 ArkTS、新的 UI 框架 ArkUI 等等。從模式上來(lái)說(shuō),它與生成式 AI 結(jié)合企業(yè)

    2024年04月25日
    瀏覽(20)
  • Python網(wǎng)頁(yè)應(yīng)用開發(fā)神器fac 0.2.6版本重要新功能一覽

    Python網(wǎng)頁(yè)應(yīng)用開發(fā)神器fac 0.2.6版本重要新功能一覽

    fac項(xiàng)目地址:https://github.com/CNFeffery/feffery-antd-components ,歡迎star支持 大家好我是費(fèi)老師,距離我的開源 Python 網(wǎng)頁(yè)應(yīng)用通用組件庫(kù) fac 的 0.2.0 版本發(fā)布已過(guò)去半個(gè)多月的時(shí)間,在國(guó)內(nèi)外眾多 fac 用戶的反饋建議下,經(jīng)過(guò)高強(qiáng)度的優(yōu)化和功能更新,目前 fac 已經(jīng)更新到 0.2.6 版本

    2024年02月02日
    瀏覽(24)
  • 前端食堂技術(shù)周刊第 93 期:7 月登陸 Web 平臺(tái)的新功能、Node.js 工具箱、Nuxt3 開發(fā)技巧、MF 重構(gòu)方案

    前端食堂技術(shù)周刊第 93 期:7 月登陸 Web 平臺(tái)的新功能、Node.js 工具箱、Nuxt3 開發(fā)技巧、MF 重構(gòu)方案

    美味值:?????????? 口味:橙橙冰萃美式 食堂技術(shù)周刊倉(cāng)庫(kù)地址:https://github.com/Geekhyt/weekly 大家好,我是童歐巴。歡迎來(lái)到前端食堂技術(shù)周刊,我們先來(lái)看下上周的技術(shù)資訊。 Deno 八月更新 Deno 1.36 更靈活的權(quán)限控制、Deno Deploy 可過(guò)濾、搜索的持久化日志、Fresh 1.3 路由

    2024年02月13日
    瀏覽(29)
  • Java 20 新功能介紹

    Java 20 共帶來(lái) 7 個(gè)新特性功能 ,其中三個(gè)是孵化提案,孵化也就是說(shuō)尚在征求意見階段,未來(lái)可能會(huì)刪除此功能。 JEP 描述 分類 429 作用域值(孵化器) Project Loom,Java 開發(fā)相關(guān) 432 Record 模式匹配(第二次預(yù)覽) Project Amber,新的語(yǔ)言特性 433 switch 的模式匹配(第四次預(yù)覽)

    2024年02月03日
    瀏覽(26)
  • Midjourney新功能:角色參照指南

    基本概念 角色參照(Character Reference) :這個(gè)功能允許用戶在不同的圖像生成中保持給定參照角色的一致性。 適用模型 :適用于Midjourney V6和Niji6型號(hào)。 功能亮點(diǎn) 跨風(fēng)格一致性 :可以在不同風(fēng)格(如動(dòng)漫風(fēng)、寫實(shí)風(fēng))中保持角色特征一致。 面部、著裝、發(fā)型調(diào)控 :用戶可以

    2024年04月10日
    瀏覽(43)
  • TypeScript 5.1發(fā)布,新功能更新

    TypeScript 5.1發(fā)布,新功能更新

    1:返回類型增加undefined 這里設(shè)置了一個(gè)別名 fun,當(dāng)時(shí)使用它的時(shí)候,我們必須顯示返回一個(gè) undefined 。 現(xiàn)在你可以直接設(shè)置返回類型: 而不僅限于 void any 。 4.3版本 :? 5.1版本 :? 2:getter可以設(shè)置和 setter 的不相關(guān)類型 在之前版本 ,get 返回類型應(yīng)該為 set 的子類型,如

    2024年02月09日
    瀏覽(24)
  • SOLIDWORKS 2023新功能揭秘(一):3D CAD功能的十大更新

    SolidWorks 3D CAD ?軟件擁有設(shè)計(jì)、模擬、成本估算、可制造性檢查、CAM、可持續(xù)設(shè)計(jì)和數(shù)據(jù)管理等功能,同時(shí)還包含適用于鈑金,焊件,曲面,模具,產(chǎn)品配置,DFM和CAM的專業(yè)工具,支持ECAD/MCAD協(xié)作,復(fù)雜的零部件庫(kù)以及高級(jí)真實(shí)感渲染。更重要的是具有結(jié)構(gòu)和運(yùn)動(dòng)分析功能,

    2024年02月05日
    瀏覽(18)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包