结构体
具体看基础入门
C++基础入门
公用体
使用union 关键字,定义共用体的方式和定义结构体类型,定义了一个新的数据类型,带有多个成员.所有成员公用一块内存,所以共用体变量的大小是其成员中最长的那个成员的大小,所以共用体中所有成员的存储单元是会相互覆盖的
用的比较少,知道有就行
#include <iostream>
using namespace std;
#pragma warning(disable:4996)
union Data
{
int i;
float f;
string str;
};
int main()
{
union Data data1,data2;
data1.i = 10;
data1.f = 22.2;
data1.str = "xxx";
data2 = data1;
cout << data2.i << endl;//乱码
cout << data2.f << endl;//乱码
cout << data2.str << endl;//正确输出
return 0;
}
注意:
共用体输出只有最后一个输出的是正确的,因为之后输出的值会覆盖原来的值,导致之前的值出现乱码
string是一个可变长度的字符数组,共用体无法识别大小,所以无法使用
枚举
语法:
enum 枚举名
{
枚举值表;
};
定义枚举变量:只能输出序号
enum weekday{sun,mon,tue,wed,thu,fri,sat},h,j,k;
int main()
{
enum weekday a,b,c; // C++中enum可以省略
enum weekday { sun, mon, tue, wed, thu, fri, sat }a,b,c;
a = sun;
b = mon;
c = tue;
cout << a << " " << b << " " << c << endl; //0 1 2 枚举元素本身是有系统定义了一个表示序号的数值,从0开始顺序定义为0,1,2,....
}
枚举序号问题:序号会因人为改变而改变
enum weekday
{
sun=7,
mon,
tue,
wed,
thu=3,
fri,
sat
}a,b,c;
a = sun;
b = mon;
c = fri;
cout << a << " " << b << " " << c << endl; //0 1 2 枚举元素本身是有系统定义了一个表示序号的数值,从0开始顺序定义为0,1,2,....
强转类型:枚举类型是无法用整型赋值,需要把整型类型强转为枚举类型,才能生效
enum weekday
{
sun,
mon,
tue,
wed,
thu,
fri,
sat
}a, b, c;
a = (enum weekday)0;
b = (enum weekday)1;
c = (enum weekday)5;
cout << a << " " << b << " " << c << endl; //枚举类型是无法用整型赋值,需要把整型类型强转为枚举类型,才能生效
循环输出枚举
#include <iostream>
using namespace std;
#pragma warning(disable:4996)
int main()
{
enum weekday
{
sun,
mon,
tue,
wed,
thu,
fri,
sat
}day;
for(day=sun;day<=sat;day=(enum weekday)(day+1)) //day=day+1这里要给day+1强转类型,否则无法使用
{
cout << day << endl;
}
return 0;
}
练习:
从键盘输入一个整数,显示对应枚举常量的星期的英文名称。
样例输入:
1
样例输出:
monday
分析:
定义一个enum类型存储周一至周日;
强制转换变量;
switch语句对应输出即可。
#include<iostream>
using namespace std;
int main()
{
enum weekday
{
sun,
mon,
tue,
wed,
thu,
fri,
sat
}day;
int n;
cin >> n;
switch ((enum weekday)n)
{
case sun:
cout << "Sunday" << endl;
break;
case mon:
cout << "Monday" << endl;
break;
case tue:
cout << "Tuesday" << endl;
break;
case wed:
cout << "Wednesday" << endl;
break;
case thu:
cout << "Thursday" << endl;
break;
case fri:
cout << "Friday" << endl;
break;
case sat:
cout << "Saturday" << endl;
break;
default:
cout << "error" << endl;
break;
}
return 0;
}