C++11:委托构造函数
前言
如果一個(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ù)后就不能用類成員初始化了。
如下:
以上寫法會(huì)報(bào)錯(cuò):error: an initializer for a delegating constructor must appear alone。
只能通過成員賦值來進(jìn)行初始化。
總結(jié)
以上是生活随笔為你收集整理的C++11:委托构造函数的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: GitLab创建空仓库后拉取并上传文件遇
- 下一篇: C++11:继承构造函数