久々にC++でシミュレーションを組んでいます。
今、あるシステムのデバイス構成要素のクラス設計が完了したのですが、この段階になって、そのシステムを使っている会社のクラスの中に収納したくなりました。
しかし、今更、その会社のクラスの中に、デバイスのクラスを組み込むなんぞ、面倒なことはしたくありません。
そういえば、私、こんなに色々なプログラミングやってきたのに、未だ、「クラスの中にクラスを定義する」ということをやったことがなかったことに気がつきました。
今までは、全部作り直してきたようです。昔の私は根性があったようです。
少し調べてみたら、「インナークラス」という記載方法があるようですが、コンストラクタの定義を考えたら、面倒くさくなったので、ポインタで逃げることにしました。
こんな感じです。
class Water_Pipe { public: Water_Pipe(int lenght) // 単位はメートル { max_length = lenght; max_array_count = lenght/2; //秒速2メートル で必要となるタイムスライス for( int i = max_array_count-1; i >= 0; i--) // パイプの初期化 water_array[i] = 0; } double water_input_output(double volume_of_water) { output_water = water_array[max_array_count-1]; for( int i = max_array_count-1; i > 0; i--) { water_array[i] = water_array[i-1]; } water_array[0] = volume_of_water; return output_water; } private: int max_length; int max_array_count; double output_water; double water_array[20000]; }; class Water_Company { public: Water_Pipe *m_water_pipe; } int _tmain(int argc, _TCHAR* argv[]) { Water_Pipe water_pipe1(1000); // 1000メートル Water_Company water_company; water_company_A.m_water_pipe = &(water_pipe1); water_company_A.m_water_pipe->water_input_output(100); }