结构体
结构体其实是一种特殊的类。是c++继承c语言得来的,但是与类不同有以 下两点
1.关键字为 struct,类的关键字为class.
2.其默认属性为public,类的默认属性为private
其他与c++中类的使用方法相同下面举一个例子说明结构体的使用
#include <iostream>
using namespace std;
struct test {
private:
int i;
int j;
public:
test(int i1, int j1) :i(i1), j(j1) {
}
int getx(){
return i;}
int gety() {
return j; }
};
int main()
{
test rui(3, 2);//构造函数初始化
cout << rui.getx() << endl;//输出成员x的值
}
联合体
联合体利用关键字 union声明,最主要的特点是储存空间的共用,其中成员也包括private public 以及protected属性,但是由于共用一个储存空间的特点所以。任何数据不可能同时有效,具体储存如下图所示
以上为联合体内存示意图。
可以看到共用一个内存,所以当有以下代码
union mark{
int i;
int j;
};
i=1;
j=2
当j的值等于2时,i的值会被覆盖,因为他们之间共用一个内存。
枚举类
同枚举类型相似具体枚举类型值,但是与枚举类型不同的是,枚举类有强作用域,所以在枚举值的同时需要加上限定域,所有不会重名,意义也会更加清晰。
举例如下
enum {
Grade,
Pass,
Percentage
}mode;
并且枚举类可以设定底层值,具体格式如下
enum calss 枚举类型名:底层类型{枚举值表};其中默认为int,也可以指定其他类型。
下面将三个类融合写一个例子,建立一个考试信息的类,里面有三种统计的方式分别是 int char bool,根据三种类型输出不同形式的分数,具体代码如下
#include <iostream>
# include<string>
using namespace std;
class examinfo {
private:
//课程名字
string name;
//枚举类mode
enum {
Grade,
Pass,
Percentage
}mode;
//无名联合体,就是没有名字的类,可以直接用
union {
char grade;
bool pass;
int percent;
};
public:
//不同类型的构造函数,根据不同的模式选择不同的初始化对象
examinfo(string name, char grade1) :name(name), mode(Grade), grade(grade1) {
}
examinfo(string name, int precent) :name(name), mode(Percentage), percent(precent) {
}
examinfo(string name, bool pass) :name(name), mode(Pass), pass(pass) {
}
void show();
};
void examinfo::show() {
//输出课程名
cout << "name : " << name << endl ;
//选择模式
switch (mode)
{
case examinfo::Grade:
cout << "grade is :" << grade << endl;
break;
case examinfo::Pass:
cout << "pass is " << pass << endl;
break;
case examinfo::Percentage:
cout << "percent is " << percent << endl;
break;
default:
break;
}
cout << endl;
}
int main()
{
examinfo english("english", 109);
english.show();
examinfo chinese("chinese", 'A');
chinese.show();
examinfo math("math", false);
math.show();
}
运行代码结果如下
以上就是结构体 联合体 以及枚举类的基本概念