日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

C++11:委托构造函数

發(fā)布時(shí)間:2025/1/21 c/c++ 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 C++11:委托构造函数 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

前言

如果一個(gè)類中重載了多個(gè)構(gòu)造函數(shù),并且在每個(gè)構(gòu)造函數(shù)中都需要對(duì)某些變量進(jìn)行初始化,這時(shí)候就會(huì)出現(xiàn)很多重復(fù)的代碼,在C++11之前存在這個(gè)問題。而C++11中新增的委托構(gòu)造函數(shù),就是為了解決這個(gè)問題,它允許在同一個(gè)類中一個(gè)構(gòu)造函數(shù)可以調(diào)用另外一個(gè)構(gòu)造函數(shù),從而可以在初始化時(shí)簡(jiǎn)化變量的初始化。

委托構(gòu)造函數(shù)

我們先來看一個(gè)老版本的寫法示例:

class ClassA{public:ClassA(){}ClassA(int max){m_max = max > 0 ? max : 20;}ClassA(int max,int min){m_max = max > 0 ? max : 20;m_min = min > 0 && min < m_max ? min : 5;}ClassA(int max,int min,int middle){m_max = max > 0 ? max : 20;m_min = min > 0 && min < m_max ? min : 5;m_middle = middle < max && middle > min ? middle : 10;}private:int m_max;int m_min;int m_middle; };

以上示例只是為了展示在成員變量較多、初始化比較復(fù)雜的并且存在多個(gè)構(gòu)造函數(shù)的情況下,每個(gè)構(gòu)造函數(shù)都需要進(jìn)行賦值,代碼重復(fù)繁瑣。

通過委托構(gòu)造函數(shù)就可以簡(jiǎn)化這個(gè)過程:

class ClassA{public:ClassA(){}ClassA(int max){m_max = max > 0 ? max : 20;}ClassA(int max,int min):ClassA(max){m_min = min > 0 && min < m_max ? min : 5;}ClassA(int max,int min,int middle):ClassA(max,min){m_middle = middle < max && middle > min ? middle : 10;}private:int m_max;int m_min;int m_middle; };

需要注意的是,這種鏈?zhǔn)秸{(diào)用構(gòu)造函數(shù)不能形成一個(gè)環(huán),否則將會(huì)在運(yùn)行時(shí)拋異常。

注意

注意:使用了委托構(gòu)造函數(shù)后就不能用類成員初始化了。
如下:

class ClassA{public:ClassA(){}ClassA(int max){m_max = max > 0 ? max : 20;}//errorClassA(int max,int min):ClassA(max),m_str("abc"){m_min = min > 0 && min < m_max ? min : 5;}//只能通過成員賦值來初始化ClassA(int max,int min):ClassA(max){m_str = "abc";m_min = min > 0 && min < m_max ? min : 5;}private:int m_max;int m_min;string m_str; };

以上寫法會(huì)報(bào)錯(cuò):error: an initializer for a delegating constructor must appear alone。
只能通過成員賦值來進(jìn)行初始化。

總結(jié)

以上是生活随笔為你收集整理的C++11:委托构造函数的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。