第十三课:结构体和联合体
学习目标:
- 理解结构体的基本概念和如何定义结构体。
- 学习如何使用结构体来组织相关数据。
- 了解联合体的概念及其与结构体的不同点。
学习内容:
-
结构体
- 概念: 结构体是C++中用于表示一组相关数据的复合数据类型。它允许将不同或相同类型的数据项组织为一个单一的数据类型。
- 代码示例:
#include <iostream> #include <string>// 定义一个结构体来存储学生信息 struct Student {std::string name;int age;float gpa; };int main() {// 创建一个Student结构体的实例Student student1;student1.name = "Alice";student1.age = 20;student1.gpa = 3.8f;// 访问并输出学生信息std::cout << "Student Name: " << student1.name << std::endl;std::cout << "Student Age: " << student1.age << std::endl;std::cout << "Student GPA: " << student1.gpa << std::endl;return 0; }
- 预计输出效果:
Student Name: Alice Student Age: 20 Student GPA: 3.8
- 使用场景: 结构体适合用于将一组逻辑上相关的数据项组织在一起,比如学生的记录、产品的目录等。
-
联合体
- 概念: 联合体是一种特殊的数据类型,允许在相同的内存位置存储不同的数据类型。联合体的大小等于其最大成员的大小。
- 代码示例:
#include <iostream>// 定义一个联合体,可以存储整数、浮点数或字符 union Data {int i;float f;char c; };int main() {Data data;data.i = 10;std::cout << "Data as integer: " << data.i << std::endl;data.f = 220.5;std::cout << "Data as float: " << data.f << std::endl;// 注意:现在不能再使用data.i来获取整数,因为最后一次赋值是浮点数data.c = 'A';std::cout << "Data as char: " << data.c << std::endl;// 注意:现在data.f也不是有效的,因为最后一次赋值是字符return 0; }
- 预计输出效果:
Data as integer: 10 Data as float: 220.5 Data as char: A
- 使用场景: 当你需要在同一时间只存储一个项,但这个项可能是多种不同的类型中的一个时,使用联合体可以节省内存。
练习题: 编写一个C++程序,定义一个名为Rectangle
的结构体,包含长(width)和高(height)两个成员。在main
函数中创建一个Rectangle
实例,并编写一个函数来计算矩形的面积。输出这个矩形的面积。
答案:
#include <iostream>// 定义Rectangle结构体
struct Rectangle {float width;float height;
};// 计算矩形面积的函数
float calculateArea(const Rectangle& rect) {return rect.width * rect.height;
}int main() {// 创建Rectangle实例Rectangle myRect;myRect.width = 5.5f;myRect.height = 10.0f;// 计算并输出面积float area = calculateArea(myRect);std::cout << "The area of the rectangle is: " << area << std::endl;return 0;
}
预计输出效果:
The area of the rectangle is: 55
目录
第十四课:类和对象