C++联合体

版权声明:版权所有 如有侵权 概不追究 https://blog.csdn.net/weixin_40903417/article/details/86665720
#include "stdafx.h"
#include <iostream>
#include <string>

using namespace std;
class ExamInfo
{
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 show();

private:
	string name;
	enum 
	{
		GRADE,PASS,PERCENTAGE
	}mode;
	union //无名联合
	{
		char grade;
		bool pass;
		int percent;
	};
};
void ExamInfo::show()
{
	switch (mode)
	{
	case ExamInfo::GRADE:cout<<name<<":"<<grade<<endl;
		break;
	case ExamInfo::PASS:cout<<name<<":"<<(pass?"PASS":"FAIL")<<endl;
		break;
	case ExamInfo::PERCENTAGE:cout<<name<<":"<<percent<<endl;
		break;
	default:
		break;
	}
}


int _tmain(int argc, _TCHAR* argv[])
{
	ExamInfo a("Math",'A');
	ExamInfo b("English",true);
	ExamInfo c("Chinese",98);
	a.show();
	b.show();
	c.show();
	system("Pause");
	return 0;
}

无名联合体内,数据占用同一个内存空间

猜你喜欢

转载自blog.csdn.net/weixin_40903417/article/details/86665720
今日推荐