前回の授業で仮想関数の話をしたので、 演習と課題に取組む。
最初に、学科によってはグラフィックスを使う機会も少ないし、 演習もかなり以前だと思われるので、GrWinの使い方を思い出してもらうための資料を配布。
仮想関数とグラフィックス処理
次に、前回の授業の後半で説明した、グラフィックスを扱う仮想関数のサンプルプログラムを示し、 その説明を行う。
このサンプルプログラムでは、グラフィックスを使うということで、 GrWinクラスを作り、コンストラクタでウィンドウの初期化処理、 デストラクタでウィンドウの閉じる処理を記載してある。
class GrWin { privete: int width , height ; public: GrWin( int , int ) ; ~GrWin() ; } ; // コンストラクタでウィンドウを開く処理 GrWin::GrWin( int w , int h ) : width( w ) , height( h ) { GWopen( 0 ) ; // 略: PDF資料をみてください } // デストラクタでウィンドウを閉じる処理 GrWin::~GrWin() { GWquit() ; } void main() { GrWin gr( 640 , 480 ) ; // 描画処理 }
次に、図形を描くクラス(Figure)を考える。 このクラスから四角(FigureBox)と、円(FigureCircle)を派生させる。
// 図形のクラス(純粋仮想基底クラス) class Figure { public: virtual void draw( int , int ) = 0 ; } ; // 四角を描く図形クラス class FigureBox : public Figure { private: int width , height ; public: FigureBox( int w , int h ) : width( w ) , height( h ) {} virtual void draw( int , int ) ; } ; virtual void FigureBox::draw( int x , int y ) { GWline( ... , ... , ... , ... ) ; // 略: PDF資料参照 } // 丸を描く図形クラス class FigureCircle : public Figure { private: int radius ; public: FigureCircle( int r ) : radius( r ) {} virtual void draw( int , int ) ; } ; virtual void FigureCircle::draw( int x , int y ) { // 略: PDF資料参照 for( double th = 0 ; th < 360 ; th += 5.0 ) { : } } void main() { Figure* array[3] = { new FIgureBox( 100 , 100 ) ; new FigureCircle( 150 ) ; new FigureBox( 50 , 100 ) ; } ; for( int i = 0 ; i < 3 ; i++ ) { array[ i ]->draw( 100 + 100 * i , 150 ) ; } }