特点:以类名作为函数名,无返回类型
构造函数的样子:
类名(用来初始化传入的形参,常常用const修饰):初始化列表,一般是 成员变量名(初始化的值)
{
构造函数体,在构造函数体重也可以对成员变量进行赋值,一般来说两种初始化方法效率差不多,某些情况在初始话列表中初始化效率高一些。const变量和引用类型变量必须在初始话列表中初始化
}
class Student
{
public:
//在没有定义构造函数的时候,系统会定义这么一个“空的构造函数”,一旦定义了任何一种构造函数
//那么如果要这样的一个"空的构造函数",必须显示的定义一个
Student()
{
name="who";
num=0;
}
Student(const string Cname,const int Cnum ):name(Cname),num(Cnum)//一个比较完整的构造函数,当然也可以把初始化的过程放到函数体体重来完成
{ }
//这个构造函数与上面这个构造函数是一样的,所以编译器会给出“重新定义无效”的错误
Student(const string Cname,const int Cnum)
{
name=Cname;
num=Cnum;
}
//函数名前面加上explict可以防止隐式的类型转换
explicit Student(const string Cname,const int Cnum)
{
name=Cname;
num=Cnum;
}
/*构造函数重载
(2)函数名字相同;
(3)参数不同;*/
//由于参数个数不同,这个构造函数与上面的构造函数形成重载,当然也可以因为参数的类型不同而形成重载
Student(const string Cname)
{
name=Cname;
num=1;
}
private:
string name;
int num;
};