第四章 复合类型(2)

结构体

有的时候可能要将不同类型的数据存到同一个单元中,例如,存储一个班级的学生的姓名、学号、分数。此时数组就不能满足这种情况,因为数组要求元素的类型相同,因此此时我们需要一种特殊的数据结构——结构体。

以学生的姓名、学号、分数为例创建一个结构体:

struct Student
{
    string name;
    int number;
    float grade;
};

第一行为申明结构体的关键字struct + 结构体名称。大括号中的为结构体的成员。
定义完结构后,就可以使用这种结构类型的变量了:

#include<iostream>
#include<string>
using namespace std;

struct Student
{
    string name;
    int number;
    float grade;
};

int main()
{
    Student student;
    student.name = "张三";
    stuent.number = 13;
    student.grade = 80.0
    return 0;
}

通过“.”运算符可以获取到各个成员并且给其赋值。

在这个例子中我们将结构体申明在main()函数前面,这种申明被称为外部申明,如果放到main()函数里面,则被称为内部申明,它们之间的区别是外部申明可以被所有函数使用,但内部申明只能被其所包含的函数使用。C++推荐使用外部申明。

结构体初始化

Student student
{   
    "张三",
    13,
    80.0

};

和数组一样,使用逗号来分割值,因此我们可以将结构体看作是可以存储不同类型的数据的特殊数组,因此我们可以将初始化写成数组初始化的形式。

Student student {"张三", 13, 80.0};

同时我们也可以在申明结构体时立即初始化:

struct Student
{
    string name;
    int number;
    float grade;
} strudent
{
    "张三"1380.0
}

结构数组

在上面我们定义了学生信息的结构体,假设一个班有100个学生,每个学生的信息类型都一样,因此我们需要创建100个结构体变量来储存学生信息,这种方式显然很复杂,因此我们可以利用数组,创建一个元素类型为结构体的数组。

Student students[100];
for(int i = 0; i < 100; i++){
    cin >> student.name >> student.nuber >> student.grade;
}

这样就可以将班级里的信息都储存在一起了。

枚举

枚举是一种创建粗豪常量的方式,这种方式可以替代const。

enum spectrum
{
    red, orange, yellow, green, blue, violet, indigo, ultraviolet
};

上面定义好了一个叫spectrum的枚举,那么在其中的red, orange, yellow符号就被对应为数值0~7。这些常量被叫做枚举量。通过枚举,我们就不需要在程序中定义:

int main()
{
    int red = 0;
    int orange = 1;
    ...
}

枚举让程序更加简洁。

枚举变量具有一些特殊的属性,首先在不进行强制类型转换的情况下,只能将定义枚举时使用的枚举量赋值给这种枚举的变量,例如:

spectrum band;  //创建一个枚举变量
band = orange;  //有效,此时band的数值为1
band = 1;  //无效,1不是枚举量,orange才是枚举量

并且,枚举变量赋值也需要注意,不能超过枚举中的整数值上界,因此band最多只能为7。

band = ultraviolet + violet;  //无效,超过上界

枚举量是整型,因此可以被提升为int类型,但int类型并不能转换为枚举类型。

int color = orange;  //有效
band = 3;  //无效
color = 3 + orange;  //有效
band = orange + red;

对于这个语句,编译器认为其是无效的,因为enum类型没有定义 + + +这个运算符。但如果定义band的类型为int,那么这个语句将被通过,此时枚举量将被强制转换为int类型。

设置枚举的值

当枚举量被定义好之后,枚举值就默认第一位为0,然后依次往后递增。但除了默认之外,枚举支持显示的创建枚举值。

enum bit
{
    a = 1, b = 2, c = 3
}

或者只指定第一个枚举量的值,剩下的枚举量也是通过递增的原则赋值的。
当然也可以为每一个枚举量都指定一个枚举值。

enum bit
{
    a = 3, b = 5, c = 7
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值