c++学习笔记十二——结构体 联合体 枚举类

结构体
结构体其实是一种特殊的类。是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();

	
}

运行代码结果如下
运行结果
以上就是结构体 联合体 以及枚举类的基本概念

猜你喜欢

转载自blog.csdn.net/qq_41803340/article/details/112603831