结构体赋值 -- 构造函数

一般来说,定义结构体时会默认生成一个(不可见的)构造函数

struct Node{
    int node1;
    double node2;
    char node3;
    Node() {} //默认生成的构造函数
};
  • 它没有返回值,所以构造函数前没有返回值类型
  • 它没有参数,所以构造函数的小括号内为空
  • 它没有函数体,所以构造函数的花括号内为空

构造函数的函数名与结构体类型名相同,正是有这么一个构造函数存在,用户可以定义Node类型的变量时不初始化

Node one;
//对结构体中元素赋值
one.node1 = 0;
one.node2 = 0.0;
one.node3 = 'A';

如果想定义结构体变量时赋值,需要更改默认的构造函数

struct Node{
    int node1;
    double node2;
    char node3;
    //_node1, _node2, _node3都是变量名,换成a, b, c也可以,只要不冲突就行
    Node(int _node1, double _node2, char _node3) {
        node1 = _node1;
        node2 = _node2;
        node3 = _node3;
    }
};

这样就可以直接对结构体变量赋值

Node one = Node(0, 0.0, 'A');
//简化的构造函数写法
Node(int _node1, double _node2, char _node3): node1(_node1), node2(_node2), node3(_node3) {}

注意:如果自己定义了构造函数,默认的构造函数就被覆盖了,那么程序中不能不初始化就定义结构体变量
如果希望在程序中某些地方既可以定义时初始化,又能定义结构体时不初始化,需要再次加上默认的构造函数

#include <cstdio>

struct Node{
    int node1;
    double node2;
    char node3;
    //默认的构造函数
    Node() {}
    //全部初始化
    Node(int _node1, double _node2, char _node3): node1(_node1), node2(_node2), node3(_node3) {}
    //仅对一部分初始化
    Node(int _node1):    node1(_node1) {}
    Node(double _node2): node2(_node2) {}
    Node(char _node3):   node3(_node3) {}
    Node(int _node1, char _node3): node1(_node1), node3(_node3) {}
};

int main()
{
    Node one  = Node(0, 0.0, 'A');
    Node two  = Node(0, 'B');
    Node tree = Node('C');
    printf("%d %f %c\n", one.node1, one.node2, one.node3);
    printf("%d %c\n", two.node1, two.node3);
    printf("%c\n", tree.node3);
    return 0;
}
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值