// ( c4.C ) // クラスの初期化の注意 // #include //------ 初期化の方法その1-------------------------------------- class Vector1 { // Vector1( int a=0, ) のように値を初期化しておかない int x,y ; // と Point1 で Vector1 pt を定義した時にエラ−になる。 public: Vector1( int a=0,int b=0 ) { x = a ; y = b ; } } ; // コンストラクタは、値を初期化しておく方が無難である。 class Point1 { Vector1 pt ; int color ; public: Point1( int a,int b ):pt(a,b) { color = 1 ; } // アドレスで渡す方が効率がいい。 // Point1( int& a,int& b ):pt(a,b) { color = 1 ; } // かつ const 指定すると安全になる // Point1( const int& a,const int& b ):pt(a,b) { color = 1 ; } } ; //------ 初期化の方法その2-------------------------------------- class Vector2 { int x,y ; public: void set( int a,int b ) { x = a ; y = b ; } } ; class Point2 { // Vector2 は コンストラクタを使わないので、 Vector2 pt ; // Vector2 pt と定義してもエラ−にはならない。 int color ; public: Point2( int a=0,int b=0 ) ; } ; Point2::Point2( int a,int b ) { color = 2 ; pt.set( a,b ) ; } /* Point2::Point2( int a,int b ):pt(a,b) { .. この表現は Vector2 にコンストラクタ が定義されていないため出来ない。 */ main() { Point1 p1( 10,20 ) ; Point2 p2( 10,20 ) ; } /* [参考] その2の方法はあまり良い方法ではない。クラスが抽象クラスでない限り、つまり インスタンスを生成したいクラスならば、コンストラクタを入れておく方が良い。 */