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