结构体在C++中扮演着数据类型的角色,定义时有多种方式。首先,结构体类型如 Student 必须与变量一起声明,但不一定要在前面加上 "struct" 关键字,如:
cpp
// 不加struct也能定义变量
struct Student; // 定义类型
Student stu; // 变量定义
结构体可以紧跟类型说明后定义,甚至在定义无名结构体变量时一并完成:
cpp
// 后面还能定义更多变量
struct {
// 成员定义
} myStruct;
使用 typedef 可以为结构体创建别名:
cpp
typedef struct {
// 成员定义
} Student; // 无需再写struct
Student myStudent; // 直接使用新类型
动态创建结构体变量则需要结构体指针:
cpp
Student* dynamicStu = new Student(); // 动态结构体指针
dynamicStu->member; // 使用箭头操作符访问成员
结构体构造函数有多种初始化方法,包括默认构造和带参数的构造,注意在数组初始化时的使用规则:
cpp
// 安全构造函数示例
struct SafeStruct {
SafeStruct(int param) { ... }
};
SafeStruct[] arr; // 如果只用构造函数,数组无法初始化
结构体可以嵌套,如 Costs 可以嵌套在 Item 中:
cpp
struct Item {
string partNum;
string description;
Costs pricing; // 嵌套结构体
};
Item widget;
访问嵌套结构体成员需通过成员变量名:
cpp
widget.pricing.wholesale;
结构体赋值和成员访问也很直观:
cpp
Date birthday = {1990, 8, 23}; // 初始化所有成员
Date partialBirthday = {1990, 8}; // 部分初始化
// 不合法:不能在声明时初始化成员
// Date invalid = {1990, 8, 23}; // 错误的声明
总结,结构体变量通过"."访问,结构体指针通过"->",明确区分数据和指针操作。理解这些概念有助于更有效地使用C++中的结构体。