C++でクラスのオブジェクトを配列として宣言し、それを別の関数に渡す方法が分かりません。
C++
1sample.h 2 3class sample{ 4 public: 5 sample(void); 6 ~sample(void); 7 int test; 8 void samplefunc(void); 9} *smpl; 10
C++
1sample.cpp 2 3#include <iostream> 4#include "sample.h" 5 6using namespace std; 7 8void sample::samplefunc(void){ 9 //ここにオブジェクトのメンバであるtestを表示させたい 10} 11 12int main(void){ 13 smpl = new sample[3]; 14 for (int i = 0; i < 3; i++){ 15 smpl[i].test = i + 1; 16 } 17 18 (*smple).samplefunc(); 19 //該当のわからない場所 20 //smpleをまとめてsamplefuncに渡してsamplefunc内でcout << smpl[i] << endl;というようにしたい 21 //しかし、samplefunc内で与えられたオブジェクトの配列を要素ごとに参照する方法が分からない。 22 return 0; 23}
詳しい相談内容はソース内に記述しておりますが、main関数で要素を更新したsampleクラスのオブジェクトsmplを要素数3の配列として、各要素ののメンバをsamplefunc内で参照したい、ということです。改善方法として、main関数内でfor文を構成し、要素ごとにsamplefuncに渡せばいいというのがありますが、プログラムの構成上それがやりたくないので、それ以外の方法で解決策があれば教えていただきたいです。
基本的には、各要素に対してメソッドを呼び出す必要がありますので、本質的にはどこかで「for文を構成し、要素ごとにsamplefuncに渡」すような方法しかありません。
「それがやりたくない」とありますが、mainに書きつけるのがよくない、ということなのでしょうか?それとも、別な箇所が問題なのでしょうか?
samplefunc内で再帰処理を行いたいので、mainからforで呼び出すと上手く動作してくれないんです。
他の改善法としてはtestを要素数3の配列とするくらいでしょうか?
> samplefunc内で再帰処理を行いたいので
えっと、それは「配列の他の要素も」見たいということでしょうか?でしたら、「testを要素数3の配列と」して1インスタンスに収めるのが適切、ということになります。
>「配列の他の要素も」見たいということでしょうか?
それは配列の要素間でのやりとりがあるということをお聞きしているのでしょうか?要素間のやり取りは存在しません。オブジェクトの配列で処理した方が何かまとまっててスタイリッシュになるかなという個人的なものです笑
行いたい再帰処理は
void sample::samplefunc(void){
処理1
smpl[0].samplefunc();
処理2
smple[1].samplefunc();
処理3
smpl[2].samplefunc();
}
という形です。
回答3件
あなたの回答
tips
プレビュー