// ( c2.C ) // 派生クラスの例−その2 // #include //------ これはサ−ビス・クラスということになる --------------------- class Vector { int x,y ; public: Vector( int a=0,int b=0 ) { x = a ; y = b ; } } ; //------ これより仮想関数をベ−スとするクラス階層 ------------------- class Base { public: virtual void show_color() = 0 ; // 純粋仮想関数と言う } ; class Point: public Base { Vector pt ; int color ; public: Point( int a=0,int b=0,int cc=0 ):pt( a,b ) { color = cc ; } void show_color() { cout << "Point Color = " << color << "\n" ; } } ; class Line: public Base { Point p1,p2 ; int color ; public: Line() { p1 = Point() ; p2 = Point() ; color = 1 ; } // color 1 Line( int x1,int y1,int x2,int y2,int cc=2 ):p1(x1,y1),p2(x2,y2) { color = cc ; // color 2 } Line( Point a, Point b ) { p1 = a ; p2 = b ; color = 3 ; } // color 3 void show_color() { cout << "Line Color = " << color << "\n" ; } } ; main() { Base* List[5] ; Point p1 ; List[0] = &p1 ; Point p2( 100,200,1 ) ; List[1] = &p2 ; Line l1 ; List[2] = &l1 ; Line l2( 10,20,30,40 ) ; List[3] = &l2 ; Line l3( Point(1,2), Point(3,4) ) ; List[4] = &l3 ; for ( int i=0;i<5;i++ ) List[i]->show_color() ; // これは便利! } /* [結果] Point Color = 0 Point Color = 1 Line Color = 1 Line Color = 2 Line Color = 3 */