实际应用中,往往需要将不同的信息打包到一起存储在一个单元中。
C/C++中提供了一种数据结构–结构体。是由用户自定义的复合数据结构,包含了很多不同类型的数据对象。
#include<iostream>
#include<string>
using namespace std;
/*需要用到struct关键字
struct 结构体名
{
类型1 数据对象1;
类型2 数据对象2;
};
*/
//定义一个结构体
struct StudentInfo //习惯首字母大写
{
/* data */
string name;
int age;
double score;
}stu3, stu4={"cheng", 25, 88.9}; //一般建议结构体定义与对象创建分开,与stu1和stu2作用域不同
//输出一个数据对象的完整信息
void printInfo(StudentInfo stu)
{
cout <<"学生姓名:" << stu.name << "\t年龄:" << stu.age << "\t成绩:" << stu.score << endl;
}
int main()
{
//创建数据对象,并作初始化
StudentInfo stu1 = {"keith", 23, 100.0};
StudentInfo stu2{"king", 24, 91.2};
StudentInfo stu5 = stu4;
//访问结构体中的数据
cout <<"学生姓名:" << stu1.name << "年龄:" << stu1.age << endl;
printInfo(stu2);
//修改
stu3.name = "liming";
cout << stu3.age << stu3.name << stu3.score << endl;
}
//结构体数组
StudentInfo s[3] = {
{"zhao", 22, 67.7},
{"qian", 34, 56},
{"sun", 89, 76}
};
cout << s[1].name << endl;
for(StudentInfo stu: s)
{
printInfo(stu);
}
实际应用中,经常会遇到某个数据对象只能取有限个常量值的情况,比如一周只有7天,扑克牌四种花色等。C++提供了一种批量创建符号常量的方式,可以替代const。这就是“枚举”enum。
//枚举类型
enum Week //创建的对象的值就是以下几种其中的一个,对应值从0依次增加
{
Mon, Tue, Wed, Thu = 10, Fri, Sat, Sun //如果定义了Thu = 10, 则在此之前的将从0依次增加,之后的在10的基础上依次增加
};
int main()
{
Week wk = Fri;
//Week wk = 3; //错误
Week wk2 = Week(3); //相当于一个强制类型转换
cout << "wk: " << wk << endl; //4
cout << "wk2" << wk2 << endl; //3
}