// polymo.cpp -- CopyWrong by tsaiwn@csie.nctu.edu.tw #include class Shape{ public: virtual // 把這列去掉再 run 看看, 去掉就沒 polymorphism void draw( ) { cout << "drawing\n"; } }; class Line: public Shape{ public: void draw( ) { cout << "draw a line\n"; } }; class Circle: public Shape{ public: void draw( ) { cout << "here is a circle\n"; } }; int main( ) { Circle * ppp; Shape * fig[9]; // base class的指標可指向衍生出的object // ppp = new Shape( ); // error! ppp = (Circle *)new Shape( ); /* cast */ ppp -> draw( ); ppp = (Circle *)new Line( ); ppp -> draw( ); ppp = new Circle( ); ppp -> draw( ); cout << "======" << endl; fig[0] = new Line( ); fig[1] = new Circle( ); fig[2] = new Circle( ); fig[3] = new Line( ); fig[4] = new Circle( ); for(int k=0; k<5; k++){ fig[k] -> draw( ); } }