// ( t5.C ) // オブジェクトのクラスの型変換 // /*--------------------------------------------------------------------- CADなんかで、円弧を円に変更したい場合がある。すなわち Arc オブジェ クトを Circle オブジェクトにするわけでる。operator 演算子を用いると簡 単に変更することだできる。 しかし注意することは、該当オブジェクトそのもののクラスを変換してしま うわけでないこと。あたかじめ変換したいものの器を用意しておき、それに 内容をコピ−するというイメ−ジになることである。 -----------------------------------------------------------------------*/ #include #include class Circle { int x,y,r ; public: Circle( int cx,int cy,int cr ) { x = cx ; y = cy ; r = cr ; } void show() { printf( "I am Circle : %d %d %d\n",x,y,r ) ; } } ; class Arc { int x,y,r,sdeg,edeg ; public: Arc( int cx,int cy,int cr,int s,int e ) { x = cx ; y = cy ; r = cr ; sdeg = s ; edeg = e ; } operator Circle*() ; void show() { printf( "I am Arc\n" ) ; } } ; Arc::operator Circle*() { Circle* temp = new Circle( x,y,r ) ; return temp ; // Circle temp( x,y,r ) ; return &temp ; これはダメ! new で作成すること。 } main() { Arc a( 1,1,3,0,180 ) ; Circle* temp ; // 変換したいクラスの器を用意する。 temp = (Circle*)(&a) ; // クラスの型を変更して、内容を Circle オブジェクト // にコピ−する。 a.show() ; // I am Arc Arc オブジェクトはそのままである。 必要がなければ、消去してしまう。 temp->show() ; // I am Circle : 1 1 3 }