Notas de estudio de C ++ clase de enumeración de unión de doce estructuras

Estructura La
estructura es en realidad de un tipo especial. Se deriva del lenguaje C ++ y C, pero es diferente de las clases en los dos puntos siguientes:
1. La palabra clave es estructura, la palabra clave de la clase es clase.
2. El atributo predeterminado de la clase es público y el atributo predeterminado El atributo de la clase es privado.
Otros son los mismos que los de C ++ El método de uso es el mismo. Aquí hay un ejemplo para ilustrar el uso de la estructura

#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的值
}

Consorcio

联合体利用关键字 union声明,最主要的特点是储存空间的共用,其中成员也包括private public 以及protected属性,但是由于共用一个储存空间的特点所以。任何数据不可能同时有效,具体储存如下图所示

descripción de la imagen
Lo anterior es un diagrama esquemático de la memoria del consorcio.
Puede ver que hay una memoria compartida, por lo que cuando hay el siguiente código

union mark{
    
    
int i;
int j;
};
i=1;
j=2

Cuando el valor de j es igual a 2, el valor de i se sobrescribirá porque comparten una memoria.

La
similitud de la clase de enumeración con los tipos enumerados específicamente el tipo enumerado, pero con el tipo enumerado es diferente, hay una clase de enumeración de alcance fuerte, mientras que es necesario agregar un valor de enumeración que define el dominio, no todos el mismo nombre, el significado será más claro.
Los ejemplos son los siguientes

enum {
    
    
		Grade,
		Pass,
		Percentage
	}mode;

Y la clase de enumeración puede establecer el valor subyacente, el formato específico es el siguiente:
enum calss nombre del tipo de enumeración: tipo subyacente {tabla de valores de enumeración}; el valor predeterminado es int, también se pueden especificar otros tipos.
Escribamos un ejemplo de la integración de tres categorías para crear una categoría de información de examen. Hay tres métodos estadísticos int char bool. Según los tres tipos, se generan diferentes formas de puntajes. El código específico es el siguiente

#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();

	
}

Los resultados de ejecutar el código son los siguientes. Lo
resultado de la operación
anterior es el concepto básico de unión de estructura y clase de enumeración

Supongo que te gusta

Origin blog.csdn.net/qq_41803340/article/details/112603831
Recomendado
Clasificación