1.概述
我们知道C++中定义的对象初始化可以通过成员函数进行初始化,但是每一个对象在初始化的时候就应该有对应的初值,否则就失去对象的意义了。所以C++提供了构造函数来处理对象的初始化。构造函数是一种特殊的成员函数,与其他成员函数不同,不需要用户来调用它,而是在建立对象时自动执行。
2.构造函数的形式
类名(参数表列){函数体}
2.1无参数的构造函数
class People
{
public:
string name;
int height;
int weight;
People() //无参构造函数
{
name='GGbond';
height=170;
weight=50;
}
此时我们创建对象
People s;//不需要给出参数,s就自动被初始化为GGbond 170 50了
2.2带参数的构造函数
2.2.1一般形式创建带参数的构造函数
People(string n,int w,int h) //带参数的构造函数
{
name = n;
weight = w;
height = h;
}
创建对象时
People s("ggbond",180,50);//创建s时候我们要给出参数,这样s就被初始化为我们想要的值
2.2.2利用参数初始化表创建带参数构造函数
People(string n,int w, int h):name(n),weight(w),height(h){}//用参数初始化表初始化
创建对象时和一般形式一样
People s("ggbond",170,50);//给出我们想要的参数即可
2.3带缺省参数的构造函数
People(string n, int w, int h = 50) //带缺省参数的构造函数,如果我们没有给出h的参数,h就会被初始化为50
{
name = n;
weight = w;
height = h;
}
创建对象时
People s("ggbond",170,60);//给出全部参数 s的值 ggbond 170 60
People s1("ggbond",170);//只给两个参数,h被默认初始化为50,s ggbond 170 50
People s2("ggbond");//出错,只给了一个参数,无法匹配
一般我们常用带缺省函数的构造函数
2.4重载构造函数
在类中我们可以重载构造函数,即定义多个构造函数
class People
{public:
string name;
int weight;
int height;
People() //无参构造函数
{
name = "ggbond";
weight = 170;
height = 50;
}
People(string n,int w,int h) //带参数的构造函数
{
name = n;
weight = w;
height = h;
}
//People(string n,int w, int h):name(n),weight(w),height(h){}//用参数初始化表初始化
People(string n, int w, int h = 50) //带缺省参数的构造函数
{
name = n;
weight = w;
height = h;
}
}
上面类中定义了三个构造函数。但是他们彼此并不冲突。注意:一个类中只能定义一个带有缺省函数的构造函数,不然很容易出现冲突,出现二义性问题。