staticメンバ変数を継承して利用する

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
dic
記事: 556
登録日時: 8年前
住所: 宮崎県

staticメンバ変数を継承して利用する

#1

投稿記事 by dic » 8年前

件名のとおりstaticメンバ変数を継承して利用するときで、確認したいです

コード:

class	CSystem
{
protected:
	static	int		m_iValue;
public:
	int		GetValue() { return m_iValue; }
	void	SetValue( int v ) { m_iValue = v; }
};

class	CTask	:	public	CSystem
{
	char	m_szName[1024];	//	タスクの名前
	int		g_iNumber;		//	タスクの番号
public:
	CTask( char *name );
	~CTask();
	void	Draw( int x, int y );
};

vector<CTask*>	g_mvTask;
//==================================================================
//	初期化
void	Init()
{
	CTask	*task;

	task = new CTask( "タスク1" );
	g_mvTask.push_back( task );

	task = new CTask( "タスク2" );
	g_mvTask.push_back( task );

	task = new CTask( "タスク3" );
	g_mvTask.push_back( task );

	task = new CTask( "タスク4" );
	g_mvTask.push_back( task );

	task = new CTask( "タスク5" );
	g_mvTask.push_back( task );
}

void	Loop()
{
		g_mvTask.at(0)->SetValue( rand()%255 );
}


とあるとき Loop関数で g_mvTask[0] で SetValueを使って CSystem::m_iValue の値を変更したとき
g_mvTask[1].m_iValue
g_mvTask[2].m_iValue
g_mvTask[3].m_iValue
g_mvTask[4].m_iValue
の値も全部変更になるんですが、これでよかったでしょうか?

確認はしたのですが、偶然だったら怖いのでこれで合っているかどうかを聞きたいです
使い方としては タスク1、タスク2、タスク3、タスク4、タスク5 で同じ変数を共有、使用したいのです

maru
記事: 150
登録日時: 8年前

Re: staticメンバ変数を継承して利用する

#2

投稿記事 by maru » 8年前

dic さんが書きました:件名のとおりstaticメンバ変数を継承して利用するときで、確認したいです
とあるとき Loop関数で g_mvTask[0] で SetValueを使って CSystem::m_iValue の値を変更したとき
g_mvTask[1].m_iValue
g_mvTask[2].m_iValue
g_mvTask[3].m_iValue
g_mvTask[4].m_iValue
の値も全部変更になるんですが、これでよかったでしょうか?

確認はしたのですが、偶然だったら怖いのでこれで合っているかどうかを聞きたいです
使い方としては タスク1、タスク2、タスク3、タスク4、タスク5 で同じ変数を共有、使用したいのです
静的なメンバ変数はクラスで一つのデータしか持たず、複数のオブジェクトで共有されますので、正しい結果です。
なお、
int CSystem::m_iValue = xxx;
という変数定義がないとリンクエラーになりそうですが。

dic
記事: 556
登録日時: 8年前
住所: 宮崎県

Re: staticメンバ変数を継承して利用する

#3

投稿記事 by dic » 8年前

>>maruさん
そうなんですね 安心しました

>>int CSystem::m_iValue = xxx;
>>という変数定義がないとリンクエラーになりそうですが。
抜き出し忘れていました

閉鎖

“C言語何でも質問掲示板” へ戻る