前言
说到结构体的初始化,人们会自然的想到先定义一个结构体变量,然后对其中的元素逐一赋值,以达到初始化的目的。
但是如果这样做,当结构体内变量很多时并不方便,此处介绍一种使用“构造函数”的方法来进行初始化,供读者学习。
所谓构造函数就是用来初始化结构体的一种函数,它直接定义在结构体中。
构造函数的一个特点是它不需要写返回类型,且函数名与结构体名相同。
例子:
struct student
{
int id;
char name;
//默认生成的构造函数
student(){
}
};
“ student(){} ”就是默认生成的构造函数,可以看到这个构造函数的函数名和结构体类型名相同;它没有返回类型,所以student前面没有写东西;它没有参数,所以小括号内是空的;它也没有函数体,因此花括号内也是空的。由于这个构造函数的存在,才可以直接定义student类型的变量而不进行初始化(因为它没有让用户提供任何初始化参数)
那么,如果想要自己手动提供id和name的初始化参数,应该怎么做?
struct student
{
int id;
char name;
//下面的参数用以对结构体内部变量进行赋值
student(int _id,char _name)
{
id=_id;
name=_name;
}
};
当然构造函数也可以简写成一行
struct student
{
int id;
char name;
//下面的参数用以对结构体内部变量进行赋值
student(int _id,char _name) : id(_id),name(_nmae) {
}
};
注意:如果自己重新定义了构造函数,则不能不经初始化就定义构造函数变量。
也就是说默认生成的构造函数 " student(){} " 此时已经被覆盖了。为了既能不初始化就定义结构体变量,
又能享用初始化带来的便捷,可以把 " student(){} " 手动加上。这意味着,只要参数个数和类型不完全相同,
就可以定义任意多个构造函数,以适应不同的初始化场合。
例如: