C++之带有默认参数值的构造函数
在一個(gè)類中 ,如果程序員沒有寫,任何一個(gè)構(gòu)造函數(shù),則編譯器將為該類提供一個(gè)默認(rèn)的構(gòu)造函數(shù),如果程序員對類的構(gòu)造函數(shù)進(jìn)行了重載,則編譯器將不提供默構(gòu)造函數(shù),這里需要手動(dòng)書寫一個(gè)無參的構(gòu)造函數(shù),
無參的構(gòu)造函數(shù),也就是默認(rèn)構(gòu)造函數(shù),
默認(rèn)構(gòu)造函數(shù)分為兩種:
1、不含有參數(shù)的默認(rèn)構(gòu)造函數(shù)
2、帶有默認(rèn)參數(shù)值的構(gòu)造函數(shù)
在這里主要說的是帶有默認(rèn)參數(shù)值的構(gòu)造函數(shù)的使用及注意事項(xiàng):
定義方法示例:
class?Circle{
public:
? ? Circle(int?a=1,int?b=2,int?c=3){//本構(gòu)造函數(shù)是帶默認(rèn)值的默認(rèn)構(gòu)造函數(shù)
? ? ? ??x=a;
? ? ? ??y=b;
? ? ? ??z=c;
? ? }
private:
? ??int?x;
? ??int?y;
? ??int?z;
};
一個(gè)類中,一旦定義了帶有默認(rèn)值的構(gòu)造函數(shù),便可以直接使用,使用方式主要有以下幾種:
在這里仍使用上面的例子,進(jìn)行演示:
Circle c1;//調(diào)用默認(rèn)構(gòu)造函數(shù),此時(shí),類中的私有屬性,分別初始化為x=1、y=2、z=3;
Circle c2(5);//調(diào)用默認(rèn)構(gòu)造函數(shù),此時(shí),類中私有屬性,分別初始化為x=5、y=2、z=3;
Circle c2(5,6);//調(diào)用默認(rèn)構(gòu)造函數(shù),此時(shí),類中私有屬性,分別初始化為x=5、y=6、z=3;
Circle c2(5,6,7);//調(diào)用默認(rèn)構(gòu)造函數(shù),此時(shí),類中私有屬性,分別初始化為x=5、y=6、z=7;
當(dāng)函數(shù)中定義了帶有默認(rèn)值的構(gòu)造函數(shù),在進(jìn)行構(gòu)造函數(shù)重載時(shí),就不能任意的進(jìn)行重載,即其它構(gòu)造函數(shù)的參數(shù),與之對用的位置,不能與帶有默認(rèn)值的構(gòu)造函數(shù)相同。如果不明白,可以看下面這個(gè)例子:
class?Circle{
public:
? ? Circle(int?a=1,int?b=2,int?c=3){//本函數(shù)是帶默認(rèn)值的默認(rèn)構(gòu)造函數(shù)
? ? ? ??x=a;
? ? ? ??y=b;
? ? ? ??z=c;
? ? }
//? ? Circle(int a){//此種定義,會導(dǎo)致,構(gòu)造函數(shù)?在調(diào)用時(shí),編譯器不知該如何調(diào)用哪個(gè)構(gòu)造函數(shù),由于帶有默認(rèn)參數(shù)值的默認(rèn)構(gòu)造函數(shù)的出現(xiàn)
//? ? ? ? x=a;
//? ? ? ? y=4;
//? ? ? ? z=5;
//? ? }
//? ? Circle(float a){//此種定義,會導(dǎo)致,構(gòu)造函數(shù)?在調(diào)用時(shí),編譯器不知該如何調(diào)用哪個(gè)構(gòu)造函數(shù),由于帶有默認(rèn)參數(shù)值的默認(rèn)構(gòu)造函數(shù)的出現(xiàn)
//? ? ? ? x=(int)a;
//? ? ? ? y=4;
//? ? ? ? z=5;
//? ? }
public:
? ??void?print(){
? ? ? ??std::cout<<"x="<<x<<"y="<<y<<"z="<<z<<endl;
? ? }
private:
? ??int?x;
? ??int?y;
? ??int?z;
?? ?
};
因此,當(dāng)進(jìn)行構(gòu)造函數(shù)重載時(shí),要特別注意本文到此結(jié)束,
總結(jié)
以上是生活随笔為你收集整理的C++之带有默认参数值的构造函数的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: prim算法 求最小生成树
- 下一篇: c++模板显示实例化,显示具体化,隐式实