结构体

具体看基础入门
C++基础入门


公用体

使用union 关键字,定义共用体的方式和定义结构体类型,定义了一个新的数据类型,带有多个成员.所有成员公用一块内存,所以共用体变量的大小是其成员中最长的那个成员的大小,所以共用体中所有成员的存储单元是会相互覆盖的
用的比较少,知道有就行

  1. #include <iostream>
  2. using namespace std;
  3. #pragma warning(disable:4996)
  4. union Data
  5. {
  6. int i;
  7. float f;
  8. string str;
  9. };
  10. int main()
  11. {
  12. union Data data1,data2;
  13. data1.i = 10;
  14. data1.f = 22.2;
  15. data1.str = "xxx";
  16. data2 = data1;
  17. cout << data2.i << endl;//乱码
  18. cout << data2.f << endl;//乱码
  19. cout << data2.str << endl;//正确输出
  20. return 0;
  21. }

注意:
共用体输出只有最后一个输出的是正确的,因为之后输出的值会覆盖原来的值,导致之前的值出现乱码
string是一个可变长度的字符数组,共用体无法识别大小,所以无法使用


枚举

语法:

  1. enum 枚举名
  2. {
  3. 枚举值表;
  4. };

定义枚举变量:只能输出序号

  1. enum weekday{sun,mon,tue,wed,thu,fri,sat},h,j,k;
  2. int main()
  3. {
  4. enum weekday a,b,c; // C++中enum可以省略
  5. enum weekday { sun, mon, tue, wed, thu, fri, sat }a,b,c;
  6. a = sun;
  7. b = mon;
  8. c = tue;
  9. cout << a << " " << b << " " << c << endl; //0 1 2 枚举元素本身是有系统定义了一个表示序号的数值,从0开始顺序定义为0,1,2,....
  10. }

枚举序号问题:序号会因人为改变而改变

  1. enum weekday
  2. {
  3. sun=7,
  4. mon,
  5. tue,
  6. wed,
  7. thu=3,
  8. fri,
  9. sat
  10. }a,b,c;
  11. a = sun;
  12. b = mon;
  13. c = fri;
  14. cout << a << " " << b << " " << c << endl; //0 1 2 枚举元素本身是有系统定义了一个表示序号的数值,从0开始顺序定义为0,1,2,....

强转类型:枚举类型是无法用整型赋值,需要把整型类型强转为枚举类型,才能生效

  1. enum weekday
  2. {
  3. sun,
  4. mon,
  5. tue,
  6. wed,
  7. thu,
  8. fri,
  9. sat
  10. }a, b, c;
  11. a = (enum weekday)0;
  12. b = (enum weekday)1;
  13. c = (enum weekday)5;
  14. cout << a << " " << b << " " << c << endl; //枚举类型是无法用整型赋值,需要把整型类型强转为枚举类型,才能生效

循环输出枚举

  1. #include <iostream>
  2. using namespace std;
  3. #pragma warning(disable:4996)
  4. int main()
  5. {
  6. enum weekday
  7. {
  8. sun,
  9. mon,
  10. tue,
  11. wed,
  12. thu,
  13. fri,
  14. sat
  15. }day;
  16. for(day=sun;day<=sat;day=(enum weekday)(day+1)) //day=day+1这里要给day+1强转类型,否则无法使用
  17. {
  18. cout << day << endl;
  19. }
  20. return 0;
  21. }

练习:
从键盘输入一个整数,显示对应枚举常量的星期的英文名称。
样例输入:
1
样例输出:
monday
分析:
定义一个enum类型存储周一至周日;
强制转换变量;
switch语句对应输出即可。

  1. #include<iostream>
  2. using namespace std;
  3. int main()
  4. {
  5. enum weekday
  6. {
  7. sun,
  8. mon,
  9. tue,
  10. wed,
  11. thu,
  12. fri,
  13. sat
  14. }day;
  15. int n;
  16. cin >> n;
  17. switch ((enum weekday)n)
  18. {
  19. case sun:
  20. cout << "Sunday" << endl;
  21. break;
  22. case mon:
  23. cout << "Monday" << endl;
  24. break;
  25. case tue:
  26. cout << "Tuesday" << endl;
  27. break;
  28. case wed:
  29. cout << "Wednesday" << endl;
  30. break;
  31. case thu:
  32. cout << "Thursday" << endl;
  33. break;
  34. case fri:
  35. cout << "Friday" << endl;
  36. break;
  37. case sat:
  38. cout << "Saturday" << endl;
  39. break;
  40. default:
  41. cout << "error" << endl;
  42. break;
  43. }
  44. return 0;
  45. }