测试代码:
#include<iostream>
#include<string>
using namespace std;
//测试联合类;
class examInfo{
public:
examInfo(string name,char grade);
examInfo(string name,bool pass);
examInfo(string name,int percent); //三个构造函数
void show(); //输出
private:
string name; //课程名称
//枚举的类型名字要写在后面
enum { GRADE,
PASS,
PERCENTAGE
}model;
//联合体,可以省略名字,访问直接访问其属性名称
union{
char grade; //
bool pass;
int percent;
};
};
//构造函数初始化,内嵌对象初始化
examInfo::examInfo(string name,int percent):name(name),model(PERCENTAGE),percent(percent) {
}
//构造函数初始化,内嵌对象初始化
examInfo::examInfo(string name,bool pass):name(name),model(PASS),pass(pass) {
}
//构造函数初始化,内嵌对象初始化
examInfo::examInfo(string name,char grade):name(name),model(GRADE),grade(grade) {
}
//show 函数
void examInfo::show()
{
cout<<name;
switch(model){
case GRADE:cout<<grade<<endl;
break;
case PASS:cout<<(pass?"pass":"fail")<<endl;
break;
case PERCENTAGE:cout<<percent<<endl;
break;
}
}
//测试
int main()
{
//英语
examInfo course01("英语:",'B');
course01.show();
//高数
examInfo course02("高数:",true);
course02.show();
//c++
examInfo course03("C++:",80);
course03.show();
return 0;
}
备注: 枚举类型的声明为: enum 枚举名称{ }; 但在Dev C++编辑器的环境下,这样写会报错,至于为啥,还不清楚,先写在这里。下面是DevC++的枚举声明:
enum { GRADE,
PASS,
PERCENTAGE
}model;
这里是把枚举的名称放在最后,放在前面编译会报错。
参考书籍:C++语言程序设计第四版(郑莉,董渊,何江舟)