1. C++自定义数据类型概述
在C++编程中,自定义数据类型是构建复杂程序的基础工具。它们允许开发者将相关数据组织在一起,创建更符合问题领域的数据结构。结构体、联合体和枚举这三种自定义数据类型各有特点,适用于不同场景。
结构体(struct)是最常用的自定义数据类型,它可以将不同类型的数据成员组合成一个逻辑单元。与C语言中的结构体不同,C++的结构体可以包含成员函数,实际上与类(class)非常相似,主要区别在于默认访问权限(struct默认为public,class默认为private)。
联合体(union)是一种特殊的数据结构,所有成员共享同一块内存空间。这种特性使得联合体在需要节省内存或处理不同类型数据的场景中非常有用,但同时也要求开发者对内存使用有更精确的控制。
枚举(enum)提供了一种将整数值与有意义的名字关联起来的方式,大大提高了代码的可读性和可维护性。C++11引入的强类型枚举(enum class)进一步增强了类型安全性,避免了传统枚举的一些潜在问题。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 结构体的深入解析与应用
2.1 结构体的定义与初始化
结构体的定义语法简单直观,但需要注意一些细节。下面是一个更完整的Person结构体示例:
cpp复制struct Person {
std::string name; // 姓名
int age; // 年龄
double height; // 身高(米)
bool isStudent; // 是否为学生
// 构造函数
Person(const std::string& n, int a, double h, bool s)
: name(n), age(a), height(h), isStudent(s) {}
// 成员函数
void printInfo() const {
std::cout << "姓名: " << name << "\n"
<< "年龄: " << age << "\n"
<< "身高: " << height << "米\n"
<< "身份: " << (isStudent ? "学生" : "非学生") << std::endl;
}
};
初始化结构体有多种方式:
cpp复制// 方式1: 聚合初始化(C++11起)
Person p1 = {"张三", 20, 1.75, true};
// 方式2: 构造函数初始化
Person p2("李四", 25, 1.80, false);
// 方式3: 逐个成员初始化
Person p3;
p3.name = "王五";
p3.age = 30;
p3.height = 1.78;
p3.isStudent = true;
注意:在C++11之前,结构体不能有构造函数,初始化方式受限。现代C++推荐使用构造函数初始化,特别是当结构体较复杂时。
2.2 结构体的内存布局与对齐
理解结构体的内存布局对于编写高效、可移植的代码非常重要。考虑以下示例:
cpp复制struct E
