クラス

■概要

クラスとはC++言語で、最も重要な機能です。
クラスはC言語の構造体に近い内容になっています。
構造体は基本的に変数しか持てませんが、クラスは関数も持つことができます。
クラス内に設定した変数をメンバ変数、関数をメンバ関数と呼びます。

■クラスの定義

●クラスの定義
	クラスの定義は構造体と同じように最初に「class」であることを宣言します。
	その後、そのクラスにつける名前を記述し、中括弧({})で囲み、
	最後にセミコロン(;)をつけます。
	メンバ変数やメンバ関数の宣言は中括弧の中に記述を行います。

	・書式例
		class クラス名
		{
		};

	・具体例
		class Jugyoin
		{
		};

●メンバ変数の宣言
	メンバ変数の宣言は中括弧の間に宣言を行います。
	宣言自体はローカル変数やグローバル変数を宣言と同じで
	「型 変数名」で宣言が可能です。
	ただ、structの場合と同じように宣言時に
	値を初期化するとエラーになります。
	※C++11以降は宣言時の初期化が可能となっています。

	・書式例
		class クラス名
		{
			メンバ変数
			メンバ変数
		};

	・具体例
		// 社員クラス
		class Jugyoin
		{
			int m_Number; 		// 社員番号
			char m_Name[32];	// 名前
			int m_Salary;		// 給料
			// int m_Department = 0; // 部署(初期化しているのでエラー)
		};
			
●メンバ関数の宣言
	メンバ関数の宣言もメンバ変数の宣言と同様に中括弧の間に宣言します。
	メンバ関数の宣言はプロトタイプ宣言を行い、実際の定義は中括弧の外に行います。
	定義のの説明は別途説明しますので今回の項目では宣言のみの説明になります。
	※関数の定義をクラス内に行うことができますが、そちらの説明も別途行います。

	・書式例
		class クラス名
		{
			// メンバ関数(プロトタイプ関数宣言)
			戻り値の型 関数名(引数);
		};

	
	・具体例
		// 社員クラス
		class Jugyoin
		{
			// メンバ変数
			int m_Number; 		// 社員番号
			char m_Name[32];	// 名前
			int m_Salary;		// 給料

			// メンバ関数
			// 社員情報表示
			void ShowInfo(void);
		};

●メンバ関数の定義
	メンバ関数の定義はクラス定義の外で行います。
	関数の定義方法は基本的にユーザー関数を作成する方法と同じですが
	その関数がクラスに所属していることを明確にするために
	関数名の前に「所属しているクラス名::」を設定します。
	※クラス名と関数名の間に設定している「::」をスコープ解決演算子といいます。

	・書式例
		戻り値の型 所属クラス名::関数名(引数情報)
		{
			// 処理内部
		}

	・具体例
		class Jugyoin
		{
			// メンバ変数
			int m_Number; 		// 社員番号
			char m_Name[32];	// 名前
			int m_Salary;		// 給料

			// 社員情報表示
			void ShowInfo(void);
		};

		// 社員情報表示
		void Jugyoin::ShowInfo(void)
		{
			printf("社員番号 = %d\n", m_Number);
			printf("名前 = %s\n", m_Name);
			printf("給料 = %d\n", m_Salary);
		}

■クラスの使用方法

この項目のクラスの定義の箇所で「public」という記述がありますが、
説明は別途行いますので、そのまま記述を行ってください。

●クラスの使用
	定義したクラスを使用する方法は構造体と同じように
	クラスを変数として宣言することで使用可能です。

	・書式例
		クラス名 変数名;

	・具体例
		class Jugyoin
		{
			// メンバ変数
			int m_Number; 		// 社員番号
			char m_Name[32];	// 名前
			int m_Salary;		// 給料

			// 社員情報表示
			void ShowInfo(void);
		};

		void main(void)
		{
			// jugyoinという変数として宣言
			Jugyoin jugyoin;
		}

●メンバ変数、メンバ関数の使用
	メンバ変数、メンバ関数は所属しているクラスのメンバ関数の中で
	使用しているかどうかで記述が異なります。

	・記述が異なる理由
		メンバ関数内でクラスに所属するメンバを使用する場合は
		同じクラスのメンバであることが分かりますが、
		それ以外で使用する場合、どのクラスのメンバ変数なのかを
		明確にする必要があるために記述方法が異なります。

	・メンバ関数の外で使用する方法
		メンバ関数の外でメンバを使用する場合
		構造体のようにメンバの前に「クラス変数.」をつけて
		「クラス変数.メンバ変数」、「クラス変数.メンバ関数」とします。

		・例
			class Jugyoin
			{
			public:
				// メンバ変数
				int m_Number; 		// 社員番号
				char m_Name[32];	// 名前
				int m_Salary;		// 給料
			};

			// 社員情報表示
			void Jugyoin::ShowInfo(void)
			{
				printf("社員番号 = %d\n", m_Number);
				printf("名前 = %s\n", m_Name);
				printf("給料 = %d\n", m_Salary);
			}

			void main(void)
			{
				// jugyoinという変数として宣言
				Jugyoin jugyoin;

				// クラス変数.メンバ変数
				jugyouin.m_Number = 1001;
				strcpy_s(jugyoin.m_Name, "山田太郎");
				jugyoin.m_Salary = 220000;

				// クラス変数.メンバ関数
				jugyoin.ShowInfo();
			}

	・メンバ関数内で使用する方法
		メンバ関数内で使用する場合は自分のクラス内で宣言している
		変数や関数ということが分かっているので、
		メンバ変数、メンバ関数のみで使用が可能です。

		・例
			class Jugyoin
			{
			public:
				// メンバ変数
				int m_Number; 		// 社員番号
				char m_Name[32];	// 名前
				int m_Salary;		// 給料

				// 初期化
				void Init(void);

				// 社員情報表示
				void ShowInfo(void);
			};

			// 初期化
			void Jugyoin::Init(void)
			{
				m_Number = 1001;
				strcpy_s(m_Name, "山田太郎");
				m_Salary = 220000;

				ShowInfo();
			}

			// 社員情報表示
			void Jugyoin::ShowInfo(void)
			{
				printf("社員番号 = %d\n", m_Number);
				printf("名前 = %s\n", m_Name);
				printf("給料 = %d\n", m_Salary);
			}

			void main(void)
			{
				Jugyoin jugyoin;
				jugyoin.Init();
			}