• 締切済み

メンバ変数に関して

現在、C++にてプログラム作成しております。 1点プログラミングを行っている中で疑問になった点があります。 アイデア・方法等があれば教えて頂けると幸いです。 現在、メンバ変数として配列を定義したプログラムを作成しております。 そのメンバ変数を同クラス内のたくさんのメソッドから呼び出して処理を行っているのですが、そのメンバ変数の配列数を固定配列数ではなく、可変な配列数にしたいと考えております。 プログラムの実行後に取得した値をメンバ変数の配列数にしたいのです。 このように、メンバ変数の配列数の可変可を実施することは可能でしょうか?

みんなの回答

  • Schwarz20
  • ベストアンサー率46% (6/13)
回答No.3

> メンバ変数の配列数の可変可を実施することは可能でしょうか? 可能です。 ANo2.が応えている通り、STL(Standard template library)が使える環境であれば、vectorテンプレートクラス等のコンテナを使用するのがよいと思います。 STLでは、配列<vector>だけでなく、リスト<list>、連想配列<map>、待ち行列<queue>、スタック<stack>などの構造を使用することが出来ます。 参考URLにSTLのコンテナの特徴一覧がありますので、参考にしてください STLが使用できなければ、ANo1.のように、new[]/delete[]演算子やmalloc/calloc/realloc/freeのメモリー制御関数を使用することになります。そのときは、メモリーの解放や、コピーコンストラクタの動作に気をつけてください。 特に、デストラクタでdelete[]やfreeがあるとインスタンスをコピーしたとき問題が発生しやすくなります

参考URL:
http://ufcpp.net/study/stl/characteristics.html
  • MrBan
  • ベストアンサー率53% (331/615)
回答No.2

自分でnew[]するより、std::vectorを使えばdelete[]も気にする必要がないです。

  • koedame
  • ベストアンサー率33% (10/30)
回答No.1

可能ですけど、メンバ変数として使いまわす場合、その配列内の 値の保持を優先する場合面倒ですが・・・。(ソースが読みにくくなる場合もしばしば) 知っていたなら無用のおせっかいですが、 簡単にやるなら new 演算子を使うと便利です。 int *p;//int 型のポインター p = new int[ 10 ]; これだけで p は10のint型配列になります。 new 演算子は本来アドレスを指すだけのポインターに 領域を確保させ、そのポインター自体に値を格納することが できます。 ただし、プログラムの最後までには必ず delete 演算子で確保した領域の開放をしなければなりません。 delete [] p; 他にも malloc() という関数があるのですが、それはご自分で調べてみてください。 様々なサイトで紹介されています。(new & delete についてもサイトで調べたほうが詳しく掲載されているのでそっちを見てみたほうがいいですよ。) >プログラムの実行後に取得した値をメンバ変数の配列数にしたいのです。 については 例: main() {   int a;   int *p;   scanf( "%d", &a );   p = new int[ a ];//領域確保   for( int i=0; i<a; i++ )   {     p[ i ] = i;     printf( "%d",p[ i ] );   }   delete [] p;//領域開放   return 0; }

関連するQ&A

  • クラス型のメンバ変数について

    クラス型のメンバ変数って、どういったメリットがあるのでしょうか? 以下のプログラムは疑問点の部分だけ書いたプログラムです。 class Caaa { (内容) }; class Cbbb { protected: Caaa m_bbb; } 上のプログラムの、 Caaa m_bbb; の部分が、どういった意味(使い道)があるのかわかりません。 int型やvoid型のメンバ変数は分かるのですが、他のクラスの型をもったメンバ変数はどういった意味があるのでしょうか。 どなたが教えてください。

  • 配列とその要素数をメンバにもつ構造体

    C言語では,配列を引数とするときに,合わせて要素数を渡さなければいけないといわれます. そこで,配列とその要素数をメンバにもつ構造体を定義して,これを要素数つき配列のように扱えば,引数として渡す場合には,この構造体を渡すだけでよいと思うのですが,このような用法は一般的に用いられているでしょうか. 単純なアイデアだと思うんですが,あまり紹介されているのを見たことがありません. もしあまり用られない用法であれば,その理由を教えてください. 現在,プログラムを書いているのですが,引数の多さに閉口しており,上の考えで,引数を減らしたいと考えています.  よろしくお願いいたします.

  • privateのメンバ変数を直接取得するユーティリティ。

    privateのメンバ変数を直接取得するユーティリティ。 以前、あるプロジェクトでクラスのprivateメンバ変数をgetterメソッドがないのに直接取得できるクラスを使っているのを見ました。 オブジェクトとメンバ変数とかを引数に渡すと、Object型で返却されるようなテスト用のユーティリティクラスみたいでした。 クラスやパッケージなどを確認しなかったので、もしかしたらそのプロジェクトで独自に作ったのかもしれません。 ただオープンソースとかで存在するのであればテストに便利なので利用したいと考えています。 できればsetterメソッドがないprivateメンバ変数に設定できるクラスがあるとよいのですが・・・。 ご存知でしたら是非おしえてください。 希望している経緯はWebアプリケーションのクラスを作成すると、コンテナのオブジェクトがないと動かない場合も多く、単体試験がやりにくいのです。 easymockなど色々ありますが、生成したオブジェクトを対象クラスに渡してあげる必要があるものが多く(staticメソッドは対象外とか)、テストのためにsetterメソッドを実装する必要があります。 個人的には単体試験をやりやすくするために、本番では使用しないメソッドになるけれど、上記のようなsetterメソッドを作成するのはよいと考えています。 依存性を少なくさせて(意味が違うかもしれませんが)、試験がしやすくなれば保守性もあがるし、バグの発生率も少なくなると思っています。 ただ人によっては本番で動かないメソッドがあるのはおかしいという人もいます(実際に言われました)。 確かにそういう考えもあるかと思いますし、以前は私もそう思っていました。 試験のためのメソッドをクラスに作成する考えについても(主にテスト用なのでprotectedで作成しています)、やめた方がいいなどのアドバイスを頂けると嬉しいです。

    • ベストアンサー
    • Java
  • function内でメンバー変数を作れる?

    ActionScriptのオブジェクトスクリプトは初めてで、ActionScript2.0で制作しようとしています。 クラス内での変数の扱い方が解らずはまっています。 class Sample{ var temp:Array = Array(); function Func_01(key, val){ this.temp[key] = val; } 上の二行目メンバー変数tempを定義する部分をFunc_01内で行うことはできないのでしょうか? やりたいことは、外部テキストファイルを読み込み、中身によって持つメンバー変数を変えたいだけです。例えば 外部テキストより sample=key_A>>>1,key_B>>>2,key_C>>>3,key_D>>>4 を読み込み sample['key_A']=1; sample['key_B']=2; sample['key_C']=3; sample['key_D']=4; のように','と'>>>'でsplit等を利用し連想配列にして利用したいのですが、function内で読み込んだ値をメンバー変数にできずはまっています。お解りの方ご教授願います。

    • ベストアンサー
    • Flash
  • 変数・メソッドについて

    教えていただきたいのですが Javaでは静的変数・静的メソッド、 インスタンス変数・インスタンスメソッドという分類がありますね。 これはどういう違いがあるのですか? どういう処理の時にどのメンバを作成していくんだよー! という明確な区別はあるのでしょうか? どなたかご協力よろしくお願いします。

    • ベストアンサー
    • Java
  • array関数に指定する引数が可変個の場合どうしたらよいでしょうか?

    array関数に指定する引数が可変個の場合どうしたらよいでしょうか? arrValue = Array("a","b","c") 上記のように、array関数を使ってvariant型の変数に格納したいのですが、 arrayに指定する個数が可変個の場合、どうやったらよいのでしょうか? arrayに指定する値は、他のプログラムによって 配列型変数"aaa"に格納済みです。 aaaに格納される配列数は可変個のため、 dim aaa() as string で定義して、取得できた数によって Redim で再定義しています。 aaaの配列数に応じて、if文などで、 配列数が1個だったら、arrValue = Array(aaa(0)) 配列数が2個だったら、arrValue = Array(aaa(0),aaa(1)) とすればできないことはないのですが、何個までを想定すればよいかも わからないため、困っています。 何かよい方法はないでしょうか?

  • 変数と配列をそれぞれ説明しなさい.また,問題によっては変数よりも配列を

    変数と配列をそれぞれ説明しなさい.また,問題によっては変数よりも配列を用いた 方が適切にプログラムを作成できる場合がある.どのようなケースか,具体的な例を用 いて説明しなさい.という課題があるのですが、特に「問題によっては変数よりも配列を用いた 方が適切にプログラムを作成できる場合がある.どのようなケースか」というのがものすごくわかりにくいです。申し訳ありませんが教えてください。

  • 変数とフィールドの使い分け

    Javaを勉強し始めて半年くらいの者です。最近、プログラムを作成する際に変数とフィールドの使い分けがあいまいになってきました。フィールドとして定義すれば、そのクラス全体で使う事が出来ますよね?しかし、これは変数として最初に適用範囲が全体になるように(要はメソッドの中とかではないところに)定義すればそのクラス全体で使う事が出来ますよね?そうすると、何を変数にして、何をフィールドにすれば良いかがこんがらがってしまうのです。極端な話。。そのクラスで使う変数を全てフィールドで定義してしまえば、変数なんていらないのではないでしょうか?逆に、フィールドをなくして、全て変数で定義することもできるのではないか等と考えてしまうのです。この2つの明確な違いはなんなのでしょうか?みなさんはどういう風に使い分けていますか?

    • ベストアンサー
    • Java
  • 変数の型を定義しなかった場合どうなりますか?

    現在、VBAを使ってプログラミングを行っているところなのですが、 一般的に、プログラムの最初で変数に対してintegerやlongといった型を定義してから使うというように教わりますが、このように型を定義しなくとも使うことが出来ます。もし定義しなかった場合、その変数の型は何に設定されているのでしょうか? では型を定義するメリット及び、せずに使った場合のデメリットは何なのでしょうか? 私が使っているのはVBAですが、他の言語では型を定義しなければ、その変数を使うことが出来ないというようなものもあるのでしょうか?

  • コンポジット型の変数?

    PL/SQL参考本を読み始めているのですが 「コンポジット型の変数」というとろこで質問があります。 コレクションを使った変数定義というのを見ているのですが その定義内容について教えてください。 参考本では下記のような定義を行っていました。 DECLARE TYPE hosttable_type IS TABLE OF VARCHAR2(15)      INDEX BY VARCHAR2(32); ・・・(1) host_table hosttable_type; ・・・(2) 「コレクションとは一般的なプログラミング用語の配列にあたる」 との解説がありましたが 上記の変数定義でどの部分が配列変数の宣言にあたるのですか? (1)が配列変数の宣言部分で (1)の「INDEX BY VARCHAR2(32)」では添字の長さを指定し 「TYPE hosttable_type IS TABLE OF VARCHAR2(15)」では 実際配列に格納する値の長さを指定してる という意味なのでしょうか??? サイトなどを調べてみてはいるのですが 自分ひとりではどうも解決できなくて。。。 どなたかお力をお貸しください!

専門家に質問してみよう