ホーム » スタッフ » 斉藤徹 » 仮想関数とグラフィックス

2015年6月
« 5月   7月 »
 123456
78910111213
14151617181920
21222324252627
282930  

最近の投稿(電子情報)

アーカイブ

カテゴリー

仮想関数とグラフィックス

前回の授業で仮想関数の話をしたので、 演習と課題に取組む。

最初に、学科によってはグラフィックスを使う機会も少ないし、 演習もかなり以前だと思われるので、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 ) ;
}
}