#include <iostream.h> class Moto { public: int moto_x; int moto_y; Moto(); }; class Composition { public: Moto moto; //メンバオブジェクトです }; Moto::Moto() { moto_x = 10; moto_y = 20; } int main(void) { Composition x; cout << "x.moto.moto_x= " << x.moto.moto_x << endl; cout << "x.moto.moto_y= " << x.moto.moto_y << endl; return 0; }
メンバオブジェクトの使い方も、上の例を見ると 大して難しくはないですね。でもここでちょっとやっかいなことがあります。 次の例題を考えてみてください。
もし、motoクラスのコンストラクタが引数を取る場合次のように書いたら どうなるでしょう。
これは、エラーになります。 少し例題を書き直してみますのでよく見て どこが違うのか検討してみてください。class Composition { public: Moto moto(5); };
わかったでしょうか。Compコンストラクタのところで#include <iostream.h> class Moto { public: int moto_x; Moto(int x); }; class Comp { public: int comp_x; Moto a; //Motoクラスのコンストラクタが //引数を取るときでも必ずこのように書く //Moto a(10);などはエラーとなる Comp(); }; //Compクラスのコンストラクタのところで //a(10)というように記述すること Comp::Comp():a(10) { comp_x = 0; } Moto::Moto(int x) { moto_x = x; } int main(void) { Comp c; cout << "c.a.moto_x = " << c.a.moto_x << endl; return 0; }
Comp::Comp():a(10)
{.......}
のように記述します。
これをメンバイニシャライザといいます。
今回は、少し面倒なことをやりました。しばらくは、
こんな面倒なことは出てきませんので安心してください。
Update Jan/15/1997 By Y.Kumei