アクセス指定子

■概要

クラスにはメンバのアクセスを制御する方法があります。
アクセス制御ではそのクラスに宣言しているメンバ変数やメンバ関数の
使用範囲の設定を行うことができます。
アクセス制御の種類は「public」「private」「protected」の
3種類があり、これらをアクセス指定子と呼びます。

●指定方法
	public、private、protectedの指定方法は共通しており、
	クラス内の各アクセス制御を行いたいメンバの前で宣言を行います。
	アクセス指定子の有効範囲は指定した次の行から
	次のアクセス指定子の指定があるまで継続します。
	※何も指定がなかった場合、メンバは「private」として扱われます。
		
	・書式例
		class Jugyoin
		{
		アクセス指定子1:
			メンバ変数

		アクセス指定子2:
			メンバ関数
		};

	・具体例
		class Jugyoin
		{
		private:
			int m_Number; 		// 社員番号
			char m_Name[32];	// 名前
			int m_Salary;		// 給料
			public:
			// 社員情報表示
			void ShowInfo(void);
		};

		上の具体例ではm_Number、m_Name、m_Salaryがprivate、
		ShowInfoがpublicの扱いになります。

	●public
		public指定をされたメンバはクラスの中と外の両方で使用可能です。
		
		・例
			class Jugyoin
			{
			public:
				int m_Number; 		// 社員番号

				void ShowInfo(void);
			};

			void Jugyoin::ShowInfo(void)
			{
				printf("社員番号 = %d\n", m_Number);
			}

			void main(void)
			{
				Jugyoin jugyoin;

				jugyoin.m_Number = 1001;
			}

●private
	private指定をされたメンバはそのクラス内でしか使用できません。

	・例
		class Jugyoin
		{
		private:
			int m_Number; 		// 社員番号
		public:
			void Init(void);
		};

		void Jugyoin::Init(void)
		{
			m_Number = 1001;
		}

		void main(void)
		{
			Jugyoin jugyoin;

			jugyoin.Init();
			jugyoin.m_Number = 1002; // エラー
		}

●protected
	protectedの効果は基本的にはprivateと同じで、
	クラス内でしか使用できません。
	ただ、privateと異なる点として「継承」と呼ばれる機能を使用した場合
	継承先でも使用することができます。。
	※protectedは継承の際にもう一度記述します

	・例
		class Jugyoin
		{
		protected:
			int m_Number; 		// 社員番号
		public:
			void Init(void);
		};

		void Jugyoin::Init(void)
		{
			m_Number = 1001;
		}

		void main(void)
		{
			Jugyoin jugyoin;

			jugyoin.Init();
			jugyoin.m_Number = 1002; // エラー
		}

●有効範囲一覧
	cpp_0003

■アクセサ

アクセサとは外部からアクセスすることができないメンバ変数(private指定)に対して
アクセスするためのメンバ関数のことです。

●アクセサがある理由
	private設定がされているメンバは外部からのアクセスを遮断しています。
	しかし、その値を参照、または変更しなければいけない状況がでます。
	その時にprivateをpublicにしたら、様々なところでアクセスできるようになるので、
	保守性(メンテナンス性)が損なわれます。
	そこでメンバに間接的にアクセスできる関数を用意して参照や変更をできるようにし、
	最低限の保守性を保ちます。

●アクセサの基本
	・関数名
		アクセサは主にprivate指定されたメンバ変数に対してアクセスするために作成され、
		参照は「get(Get)」変更は「set(Set)」を関数名の頭に指定して、
		その後ろにメンバ変数名をそのまま付けます。(m_などの部分は除く)

		・例
			メンバ変数名
				m_Number
			参照
				GetNumber
			変更
				SetNumber

	・getとset
		参照のアクセサをゲッター、変更のアクセサはセッターと呼ばれています。
		ゲッターではメンバ変数を戻り値として返し、
		セッターは引数で変更する値を指定して、その値をメンバ変数に代入します。

	・例
		class Jugyoin
		{
		private:
			int m_Number;
		public:
			int GetNumber()
			{
				return m_Number;
			}

			void SetNumber(int number)
			{
				m_Numer = number;
			}
		};

	※アクセサはクラスの内部で定義を行うことが多いです。