C++ 结构体的初始化

说到结构体初始化,自然可以先定义一个结构体变量,然后对其中的元素逐一赋值,以达到初始化的目的;或者在读入时进行赋值。

stu.id = 1;
stu.gender = 'M';

scanf("%d %c", &stu.id, &stu.gender);

但是如果这样做,那么当结构体内变量很多时并不方便,此时可使用构造函数进行初始化

所谓构造函数就是用来初始化结构体的一种函数,它直接定义在结构体中。构造函数的一个特点是它不需要写返回类型,且函数名与结构体名相同。

一般来说,对一个普通定义的结构体,其内部会生成一个默认的构造函数(但不可见)。正是由于这个构造函数的存在,才可以直接定义 StudentInfo 类型的变量而不进行初始化(因为它没有让用户提供任何初始化参数).

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

很显然,我们只需要提供初始化参数即可对结构体内的变量进行赋值,且不能和已有变量冲突。

注意:如果自己重新定义了构造函数,则不能不经初始化就定义结构体变量,也就是说,默认生成的构造函数此时被覆盖了。为了既能不初始化就定义结构体变量,又能享受初始化带来的便捷,可以把默认构造函数手动加上。这意味着,只要参数个数和类型不完全相同,就可以定义任意多个构造函数,以适应不同的初始化场合。

struct StudentInfo {
    int id;
    char gender;
    // 用以不初始化就定义结构体变量
    StudentInfo() {}            
    // 只初始化gender
    StudentInfo(char _gender) {
        gender = _gender;
    }
    // 同时初始化id和gender
    StudentInfo(int _id, char _gender) : id(_id), gender(_gender) {}
};

一个常用的例子,定义结构体数组

struct Point {
    int x, y;
    Point() {}                  // 用以不经初始化地定义pt[10]
    Point(int _x, int _y) : x(_x), y(_y) {}     // 用以初始化x和y
}pt[10];
发布了844 篇原创文章 · 获赞 135 · 访问量 15万+

猜你喜欢

转载自blog.csdn.net/qq_42815188/article/details/105063349
今日推荐