C ++の研究では、12構造体の共用体列挙クラスに注目しています

構造
構造は実際には特別な種類です。これはC ++およびC言語から派生していますが、次の2つの点でクラスとは異なり
ます。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;

また、列挙型クラスは基になる値を設定できます。具体的な形式は次のとおりです
。enumcalss列挙型名:基になる型{列挙値テーブル}。デフォルトはintで、他の型も指定できます。
3つのカテゴリを統合して試験情報カテゴリを作成する例を書いてみましょう。intcharboolには3つの統計手法があります。3つのタイプに応じて、さまざまな形式のスコアが出力されます。具体的なコードは次のとおりです。

#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