联合体结构
union 联合体名称{
公有成员
protected:
保护型成员
private:
私有成员
};
特点:
- 成员公用同一内存单元
- 任何两个成员不会同时有效
按照最多字节数的成员分配空间
无名联合
例:
union{
int i;
float f;
}
如果i=10(给i赋值)
紧接着又 f=2.2(给f赋值)
i 的值会被冲掉
实例:不同课程用不同的计分模式
#include "stdafx.h"
#include<iostream>
#include<string>
using namespace std;
class ExamInfo{
private:
string name;
enum{
GRADE,
PASS,
PECENTAGE
}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),grade(grade){}
ExamInfo(string name,int percent)
:name(name),mode(PECENTAGE),grade(grade){}
void show();
};
void ExamInfo::show(){
cout << name<<":";
switch(mode){
case GRADE:cout<<grade;
break;
case PASS:cout<<(pass ? "pass":"fail");
break;
case PECENTAGE:
cout<<percent;
break;
}
cout<<endl;
}
int _tmain(int argc, _TCHAR* argv[])
{
ExamInfo course1("English",'B');
ExamInfo course2("Calculus",true);
ExamInfo course3("C++ Programming",89);
course1.show();
course2.show();
course3.show();
system("pause");
return 0;
}
运行结果: