C++中的结构体、枚举类型及相关特性
立即解锁
发布时间: 2025-08-19 01:36:28 阅读量: 1 订阅数: 6 


C++面向对象编程入门与实践
### C++ 中的结构体、枚举类型及相关特性
在 C++ 编程中,结构体和枚举类型是两个非常重要的概念,它们为我们提供了定义自定义数据类型的方式,让我们可以更方便地组织和处理数据。下面将详细介绍结构体和枚举类型的相关知识。
#### 1. 结构体基础
结构体可以被看作是一种新的数据类型的规范。定义结构体变量的格式与定义基本内置数据类型(如 `int`)非常相似。例如:
```cpp
part part1;
int var1;
```
在 C++ 中,定义结构体变量时不需要像 C 语言那样使用 `struct` 关键字。这体现了 C++ 的一个设计目标,即让用户自定义数据类型的语法和操作尽可能与内置数据类型相似。
##### 1.1 访问结构体成员
定义结构体变量后,可以使用点运算符(`.`)来访问其成员。例如:
```cpp
part1.modelnumber = 6244;
```
这里,`part1` 是结构体变量名,`.` 是点运算符,`modelnumber` 是成员名。点运算符的真正名称是成员访问运算符,但通常我们更习惯使用“点运算符”这个简洁的称呼。
需要注意的是,在使用点运算符的表达式中,第一个组件必须是具体的结构体变量名,而不是结构体定义名。例如,我们有 `part1` 和 `part2` 两个结构体变量,通过变量名来区分不同的变量。
结构体成员的使用方式与其他变量类似,可以使用普通的赋值运算符为其赋值,也可以在 `cout` 语句中输出成员的值。例如:
```cpp
cout << "\nModel " << part1.modelnumber;
```
##### 1.2 初始化结构体成员
结构体成员可以在定义结构体变量时进行初始化。以下是一个示例程序 `PARTINIT`:
```cpp
// partinit.cpp
// shows initialization of structure variables
#include <iostream>
using namespace std;
struct part //specify a structure
{
int modelnumber; //ID number of widget
int partnumber; //ID number of widget part
float cost; //cost of part
};
int main()
{ //initialize variable
part part1 = { 6244, 373, 217.55F };
part part2; //define variable
//display first variable
cout << "Model " << part1.modelnumber;
cout << ", part " << part1.partnumber;
cout << ", costs $" << part1.cost << endl;
part2 = part1; //assign first variable to second
//display second variable
cout << "Model " << part2.modelnumber;
cout << ", part " << part2.partnumber;
cout << ", costs $" << part2.cost << endl;
return 0;
}
```
在这个程序中,我们定义了两个 `part` 类型的变量 `part1` 和 `part2`。`part1` 在定义时进行了初始化,程序输出了 `part1` 的成员值,然后将 `part1` 赋值给 `part2`,并输出 `part2` 的成员值。
初始化结构体成员时,将需要赋值的值用花括号括起来,并用逗号分隔。列表中的第一个值将赋给第一个成员,第二个值赋给第二个成员,依此类推。
##### 1.3 结构体变量在赋值语句中的使用
结构体变量可以相互赋值。例如在 `PARTINIT` 程序中:
```cpp
part2 = part1;
```
这会将 `part1` 的每个成员的值赋给 `part2` 对应的成员。需要注意的是,只有相同结构体类型的变量才能相互赋值,否则编译器会报错。
#### 2. 结构体的实际应用示例
##### 2.1 测量示例
在处理英制测量系统时,我们可以使用结构体来存储距离信息。例如,在英制中,距离通常用英尺和英寸表示。以下是一个示例程序 `ENGLSTRC`:
```cpp
// englstrc.cpp
// demonstrates structures using English measurements
#include <iostream>
using namespace std;
struct Distance //English distance
{
int feet;
float inches;
};
int main()
{
Distance d1, d3; //define two lengths
Distance d2 = { 11, 6.25 }; //define & initialize one length
//get length d1 from user
cout << "\nEnter feet: "; cin >> d1.feet;
cout << "Enter inches: "; cin >> d1.inches;
//add lengths d1 and d2 to get d3
d3.inches = d1.inches + d2.inches; //add the inches
d3.feet = 0; //(for possible carry)
if(d3.inches >= 12.0) //if total exceeds 12.0,
{ //then decrease inches by 12.0
d3.inches -= 12.0; //and
d3.feet++; //increase feet by 1
}
d3.feet += d1.feet + d2.feet; //add the feet
//display all lengths
cout << d1.feet << "\'-" << d1.inches << "\" + ";
cout << d2.feet << "\'-" << d2.inches << "\" = ";
cout << d3.feet << "\'-" << d3.inches << "\"\n";
return 0;
}
```
在这个程序中,我们定义了 `Distance` 结构体,包含 `feet` 和 `inches` 两个成员。程序要求用户输入一个距离,然后将其与预先初始化的另一个距离相加,得到总距离并输出。
需要注意的是,在 C++ 中不能直接使用 `+` 运算符对 `Distance` 类型的变量进行相加,因为 C++ 没有内置的处理 `Distance` 类型相加的例程。不过,这个问题可以通过运算符重载来解决。
##### 2.2 结构体嵌套示例
结构体可以嵌套在其他结构体中。例如,我们可以使用嵌套结构体来表示房间的尺寸。以下是一个示例程序 `ENGLAREA`:
```cpp
// englarea.cpp
// demonstrates nested structures
#inclu
```
0
0
复制全文
相关推荐








