结构体
具体看基础入门
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;}
