在一个类中 ,如果程序员没有写,任何一个构造函数,则编译器将为该类提供一个默认的构造函数,如果程序员对类的构造函数进行了重载,则编译器将不提供默构造函数,这里需要手动书写一个无参的构造函数,
无参的构造函数,也就是默认构造函数,
默认构造函数分为两种:
1、不含有参数的默认构造函数
2、带有默认参数值的构造函数
在这里主要说的是带有默认参数值的构造函数的使用及注意事项:
定义方法示例:
class Circle{
public:
Circle(int a=1,int b=2,int c=3){//本构造函数是带默认值的默认构造函数
x=a;
y=b;
z=c;
}
private:
int x;
int y;
int z;
};
一个类中,一旦定义了带有默认值的构造函数,便可以直接使用,使用方式主要有以下几种:
在这里仍使用上面的例子,进行演示:
Circle c1;//调用默认构造函数,此时,类中的私有属性,分别初始化为x=1、y=2、z=3;
Circle c2(5);//调用默认构造函数,此时,类中私有属性,分别初始化为x=5、y=2、z=3;
Circle c2(5,6);//调用默认构造函数,此时,类中私有属性,分别初始化为x=5、y=6、z=3;
Circle c2(5,6,7);//调用默认构造函数,此时,类中私有属性,分别初始化为x=5、y=6、z=7;
当函数中定义了带有默认值的构造函数,在进行构造函数重载时,就不能任意的进行重载,即其它构造函数的参数,与之对用的位置,不能与带有默认值的构造函数相同。如果不明白,可以看下面这个例子:
class Circle{
public:
Circle(int a=1,int b=2,int c=3){//本函数是带默认值的默认构造函数
x=a;
y=b;
z=c;
}
// Circle(int a){//此种定义,会导致,构造函数 在调用时,编译器不知该如何调用哪个构造函数,由于带有默认参数值的默认构造函数的出现
// x=a;
// y=4;
// z=5;
// }
// Circle(float a){//此种定义,会导致,构造函数 在调用时,编译器不知该如何调用哪个构造函数,由于带有默认参数值的默认构造函数的出现
// 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;
};
因此,当进行构造函数重载时,要特别注意。