作用:
处理对象的初始化。构造函数是一种特殊的成员函数,与其他成员函数不同的是。构造函数不需要用户来调用他,而是建立对象时自动执行。构造函数的名字必须与类名相同,而不能由用户任意命名它,以便于编译系统能够识别他并把他当作构造函数处理。它不具备任何类型,不返回任何值,构造函数的功能是由用户定义的,用户根据初始化的要求设计构造函数。
特点:
构造函数声明为public,否则不能声明对象;
名字必须和类名相同;
不能有返回值;
可以带参数初始化;
如果用户没有定义构造函数,c++编译系统会自动生成一个构造函数,只是这个构造函数的函数体是空的,没有参数,也不能初始化操作。
默认构造函数:不是说构造函数没有参数,而是调用时可以不传参。
每一个类必须至少一个构造函数。
带参数的构造函数:在调用不同对象的构造函数时,从外面将不同的数据传递给构造函数,以实现不同的初始化
定义对象时,参数的个数需和构造函数的参数个数相匹配;
classThing{
public:
Thing(inta=10,intb=20,intc=30){
x=a;
y=b;
z=c;
}
voidprintThing(){
cout<<"x="<<x<<endl;
cout<<"y="<<y<<endl;
cout<<"z="<<z<<endl;
}
private:
intx;
inty;
intz;
};
intmain(intargc,char*argv[])
{
Thingt;
t.printThing();
Things(1);
s.printThing();
Thingr(2,3);
r.printThing();
Thingv(4,5,6);
v.printThing();
cout<<"HelloC-Free!"<<endl;
return0;
}
重载构造函数:
在一个类里面可以定义多个构造函数,以便提供不同的初始方法,供用户选用,这些构造函数有相同的名字,但是构造参数或参数的类型不同。
调用函数时不必给出 实参的构造函数,称为默认构造函数;一个类只能有一个默认构造函数
尽管在一个类中可以包含多个无参构造函数,但是对于一个对象来说,建立对象时只执行一个构造函数
在构造函数头的位置,对类的成员变量进行初始化,叫做初始化列表。
例如:Thing:Thing(intx,inty);member1(x),member2(y){};
初始化列表的格式为:成员变量(赋给成员变量的值)
初始化列表的优势是:效率更高一些,有一些类型的成员变量只能通过初始化列表的形式进行初始化,如const、引用
classThing{
public:
Thing():x(77),y(44),z(23){};
Thing(inta,intb):x(a),y(b){};
Thing(inta,intb,intc);
Thing(inta);
voidprintThing(){
cout<<"x="<<x<<"y="<<y<<"z="<<z<<endl;
}
private:
intx;
inty;
intz;
};
Thing::Thing(inta):x(a){};
Thing::Thing(inta,intb,intc):x(a),y(b),z(c){};
intmain(){
Thingt;
t.printThing();
Thingh(1);
h.printThing();
Thingr(2,3);
r.printThing();
Thingv(4,5,6);
v.printThing();
return0;
}