ページ 11

[C++]クラスの引数などで、変数名を指定することは可能ですか?

Posted: 2016年2月09日(火) 21:33
by PUMP
VC++ 2008 ExpressEditionで作っています、初心者です。
関数を作るときにintやstringなど、引数を決めれるのは知っているんですが
例えば引数に「player_x」と入れればplayer_xという変数がつくれるようにすることは可能ですか?

Re: [C++]クラスの引数などで、変数名を指定することは可能ですか?

Posted: 2016年2月09日(火) 21:50
by みけCAT
私には意味がよくわかりません。
具体例(コード)を出していただけますか?
オフトピック
変数をつくる…?コンパイラかインタプリタでも作るのかな…?

Re: [C++]クラスの引数などで、変数名を指定することは可能ですか?

Posted: 2016年2月11日(木) 06:34
by PUMP
変数をつくる じゃなくて 変数を宣言する ですね。ごめんなさい。

コード:

class Character {
public:
	Character(string name);
};
普通クラスはこんな感じで書いていくと思うんですが、ここでいう string name は引数が「文字列」ですよね。
語彙力のなさもあって説明しにくいんですが、これを「変数名になる文字列」にしたいのです。つまり

コード:

class Character {
public:
	Character(string name) {
		int name[] = {   //name(のとこに渡した引数)というint型の配列変数を作りたい
			//(ここでいろいろ処理して、nameの配列変数は全て初期化)
		};
	}
};
こういうことです。勿論これはエラーが出ます。
配列変数を初期化できていないのは一目瞭然なんですが、正確にはもっといろいろとややこしい処理が入ってくる予定です。

Re: [C++]クラスの引数などで、変数名を指定することは可能ですか?

Posted: 2016年2月11日(木) 06:42
by hide
それをやる意味を感じないです。

Re: [C++]クラスの引数などで、変数名を指定することは可能ですか?

Posted: 2016年2月11日(木) 07:04
by PUMP
マップを自分で作ってみたいなと思いまして、自分なりに考えていたんですが
マップを変更するたびにいちいちマップロードするのも面倒くさいなと思いまして、一番最初に各ステージのマップデータを全て読み込もうと思ったんです。
int Map[Name][縦][横] の三次元配列だと、小さいステージの時は無駄なとこが大きいかなと思い、int MapName[縦][横] の二次元配列をいくつも作ることにして
練習も兼ねて関数作っちゃおうと考えた結果です。

Re: [C++]クラスの引数などで、変数名を指定することは可能ですか?

Posted: 2016年2月11日(木) 07:28
by hide
だったらマップの名前をstringの変数に入れればいい話ですので、変数名にする意味は無いです。

Re: [C++]クラスの引数などで、変数名を指定することは可能ですか?

Posted: 2016年2月11日(木) 07:30
by hide
あぁ違うな、マップすべて読みこむのが無駄だと思っているのですね。
だったら必要なマップだけ読めばいいので結局そんなやり方は不要です。

Re: [C++]クラスの引数などで、変数名を指定することは可能ですか?

Posted: 2016年2月11日(木) 07:36
by みけCAT
マップを

コード:

std::vector<std::vector<int> >
で作って、

コード:

std::map<std::string, std::vector<std::vector<int> > >
にマップリストを格納する、というのはどうでしょうか?
オフトピック

Re: [C++]クラスの引数などで、変数名を指定することは可能ですか?

Posted: 2016年2月11日(木) 07:53
by PUMP
>あぁ違うな、マップすべて読みこむのが無駄だと思っているのですね。
ピンとこないんですが、多分勘違いしてるかと思います。

例えば、 int Map[10][600][600] と言う配列変数を作ったとします。 ステージ0~9,最大縦サイズ0~599,最大横サイズ0~599 ということになります。
縦500,横500のステージ0を作るとしたら、Map[0][0~499][0~499]を使うことになります。
もっと小さくなり、縦10,横10のステージ1を作るとしたら、 Map[1][0~9][0~9]しか使わないわけです。

おおげさな話なんですが、このステージ1の場合 Map[1][10~599][10~599] は使わないわけですから、それは無駄だと考えてるのです。それよりは
int Map_0[500][500]
int Map_1[10][10]
という具合に宣言していった方がいいんじゃないか?という話。
何度も書くのが面倒くさいので、練習も兼ねてクラス作ろうとなったところです。


>...にマップリストを格納する、というのはどうでしょうか?
勉強してきます。

Re: [C++]クラスの引数などで、変数名を指定することは可能ですか?

Posted: 2016年2月11日(木) 08:09
by hide
動的に作ればいいの話です。
配列などををnewしましょう

Re: [C++]クラスの引数などで、変数名を指定することは可能ですか?

Posted: 2016年2月12日(金) 22:06
by PUMP
動的配列難しくてやっとざっくり分かったというレベルなんですが
動的配列を使う=無駄なメモリの使用がなくなる という認識で大丈夫ですよね?

ありがとうございます、勉強しながら使っていこうと思います。

Re: [C++]クラスの引数などで、変数名を指定することは可能ですか?

Posted: 2016年2月13日(土) 15:32
by hide
動的配列を使う=無駄なメモリの使用がなくなる という認識で大丈夫ですよね?
ちょうどの大きさの配列を作って使えば無駄は減りますね。認識としては問題ないでしょう。
それと、問題が解決した場合は返信画面の送信ボタンのとなりの解決!にチェックを入れて投稿してくださいね。