【C/C++】クラスの役割ドメイン

949 ワード

C++言語ではグローバル変数の宣言が可能であり、クラスメンバーの実装はクラスの外部にあるため、役割ドメインの問題に遭遇することが多い.ここには普段出会った問題を簡単に列挙します.
 
一、クラスメンバー関数定義のパラメータ
簡単な例です.
class T

{

	public:

		typedef double Num;

		void setValue(Num num);

	private:

		Num value;

};



void T::setValue(Num num)

{

	this->value = num;

}

ここで、NumはクラスTで定義されるタイプであり、setValueはクラスTのメンバー関数の定義(クラス外部)であるため、setValueはクラスの役割ドメインの範囲内にあるに違いない.もちろん、パラメータテーブルもクラスの役割ドメイン内にある.したがって、上記の使い方は合法的である.
二、メンバー関数の戻り値
class T

{

	public:

		typedef double Num;

		Num getValue();

	private:

		Num value;

};



Num T::getValue()

{

	return this->value;

}

 
パラメータタイプと比較して、戻り値のタイプはメンバー関数体の前にあるため、C++はNumがクラスの役割ドメイン内にあるとは考えず、上のコードをコンパイルするとコンパイラがエラーを報告します.正しい書き方は次のとおりです.
 
class T

{

	public:

		typedef double Num;

		Num getValue();

	private:

		Num value;

};



T::Num T::getValue()

{

	return this->value;

}