联合体

联合体

联合体与类和结构体的差别是存储空间的公用,成员之间共用同一个内存单元,单元的大小由成员中最大的数据类型决定,两个成员不会同时生效

   union //构造一个联合体,里面放了三种积分方式,每次只能用一种;
	   {
		   char grade;//按等级积分;
		   bool pass;//按是否通过积分
		   int percent;//按百分之成绩积分;

其定义与结构体相似(第一个不表明为public型),但是是以union开头
好处:即省了空间,又避免了给重复的不同形式的数据

#include<iostream>
#include<string>
using namespace std;
class examinfo
{
private:string name;
	   enum { GRADE, PASS, PERCENTAGE } mode;//这是一个枚举类,用来保存积分方式
	   union //构造一个联合体,里面放了三种积分方式,每次只能用一种;
	   {
		   char grade;//按等级积分;
		   bool pass;//按是否通过积分
		   int percent;//按百分之成绩积分;

	   };
public:examinfo(string name, char grade): 
	       name(name), mode(GRADE), grade(grade){}
	  examinfo(string name, bool pass ):
	       name(name),mode(PASS),pass(pass){}
	  examinfo(string name, int percent) :
		   name(name), mode(PERCENTAGE), percent(percent){}

	  void showegrade();

};

void examinfo::showegrade()//定义输出函数;
{
	switch (mode)
	{
	case examinfo::GRADE:
		cout <<name<<":"<< grade << endl;
		break;
	case examinfo::PASS:
		cout << name << ":" <<(pass ? "PASS!" : "FALT!")<<endl;
		break;
	case examinfo::PERCENTAGE:
		cout << name << ":" <<percent<< endl;
		break;
	default:
		break;
	}
}
int main()
{
	examinfo student1("english",'A');//注意,这里是字符形式的A;不然会跳开第一个构造函数
	examinfo student2("math", true);
	examinfo student3("c++ progame", 100);
	student1.showegrade();
	student2.showegrade();
	student3.showegrade();


}

枚举类
上述代码就有一个小小的枚举

 enum { GRADE, PASS, PERCENTAGE } mode

上面那个是c中的一个枚举

下面是枚举类:
用的话要这样用:前面要加个类名(c中不用)可以避免重名

枚举类型会自动转换为整数类型,所以他的类型定义不是很严格;
在定义枚举类时可以定义常量的值,也可以对类型指定底层类型

#include<iostream>
#include<string>
using namespace std;
enum class type1 { A, B };//A,B都是不确定的整数,因为没有赋值,且默认底层为int
enum class type2 {A,B};
int main()
{
	type1 c = type1::A;
	type1 d = type1::B;
	cout << (c == d) << endl;


}

无法比较两个不同的枚举类:

    type1 c = type1::A;
	type2 d = type2::B;
	cout << (c == d) << endl;//错误,两个枚举类型不一样
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值