码迷,mamicode.com
首页 > 其他好文 > 详细

结构体的初始化

时间:2021-06-21 20:02:26      阅读:0      评论:0      收藏:0      [点我收藏+]

标签:简化   赋值   重新定义   方式   man   推荐   操作   str   完全   

传统的结构体初始化方式

说到结构体的初始化,我们自然可以先定义一个结构体,然后对结构体里面的变量逐一赋值,已达到初始化的目的。但是,这样做的话,当结构体内变量很多时并不方便,所以此时就引出了使用构造函数的方法进行结构体的初始化。使用构造函数的方式进行初始化,简单方便!推荐使用。

使用构造函数对结构体进行初始化

一般来说,对一个普通定义的结构体,其内部会生成一个默认的构造函数(也称为无参构造函数)(也是不可见的)一般类似于下面这样的形式:

struct studentInfo{
    int id;
    char gender;
    //默认生成的构造函数
    studentInfo(){}
};

可以看到这个构造函数的函数名和结构体名称相同,它没有返回类型,它也没有参数,函数体也是空的。由于这个构造函数的存在,才可以直接定义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;
    }
};

结构体的初始化

标签:简化   赋值   重新定义   方式   man   推荐   操作   str   完全   

原文地址:https://www.cnblogs.com/gao79135/p/14907854.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!