说到结构体的初始化,我们自然可以先定义一个结构体,然后对结构体里面的变量逐一赋值,已达到初始化的目的。但是,这样做的话,当结构体内变量很多时并不方便,所以此时就引出了使用构造函数的方法进行结构体的初始化。使用构造函数的方式进行初始化,简单方便!推荐使用。
一般来说,对一个普通定义的结构体,其内部会生成一个默认的构造函数(也称为无参构造函数)(也是不可见的)一般类似于下面这样的形式:
struct studentInfo{
int id;
char gender;
//默认生成的构造函数
studentInfo(){}
};
那么如果我们想要自己手动提供id和gender的初始化参数,应该怎么做?我们可以自己写一个有参数的构造函数,通过这个有参的构造函数,我们就可以结构体内的变量进行初始化操作。具体形式是这样的:
struct studentInfo{
int id;
char gender;
//下面自己写的有参构造方法用以对结构体内部变量进行赋值
studentInfo(int _id, char _gender){
//赋值
id = _id;
gender = _gender;
}
}
struct studentInfo{
int id;
char gender;
//这个构造函数将上面的构造函数简化成了一行
studentInfo(int _id, char _gender) : id(_id), gender(_gender) {}
}
定义完有参的构造方法之后,我们就可以使用如下语句进行初始化,例如:id为10086 性别为M(代表man)
studentInfo stu = studentInfo(10086,‘M‘);
如果自己重新定义了一个构造函数,那么原先默认的无参构造函数就被覆盖了。这就代表你就不可以不经初始化就创建结构体变量了。那么,如果你既想不经初始化就创建结构体变量,又想按照指定的参数去初始化结构体变量的话,你可以在自定义有参的构造方法后,再重新添加一个无参的构造方法。这时,你就可以不经初始化就创建结构体变量了。并且,构造函数可以重名,只要参数个数和类型不完全相同。这就代表了,你可以去创建多种初始化结构体变量的方式。例如:
struct studentInfo{
int id;
char gender;
//用以不初始化就定义结构体变量
studentInfo(){}
//只初始化gender
studentInfo(char _gender){
gender = _gender;
}
//同时初始化id和gender
studentInfo(int _id, char _gender){
id = _id;
gender = _gender;
}
};
原文:https://www.cnblogs.com/gao79135/p/14907854.html