// ( x2.C ) // 派生クラスの仮想関数とオ−バライドの違い // #include //-例題1---------------------------------------------------- class Base { protected: int color ; public: virtual void show() = 0 ; // 純粋仮想関数 } ; class Point: public Base { public: Point() { color = 2 ; } void show() { cout << color << endl ; } // ここで実装している } ; //-例題2---------------------------------------------------- class Base2 { protected: int color ; public: void show() { cout << "base\n" ;} // ただの関数 } ; class Point2: public Base2 { public: Point2() { color = 3 ;} void show() { cout << color << endl ; } // オ−バライトしている } ; main() { Point* p = new Point() ; p->show() ; // 2 Base* base = p ; base->show() ; // 2 ((Point*)base)->show() ; // 2 仮想関数の定義により、すべて同じ表示をする /* Point2* p = new Point2() ; p->show() ; // 3 Base2* base = p ; base->show() ; // base が表示される ((Point2*)base)->show() ; // 3 キャストすると Point2 の show() が実行する */ }