ホーム » スタッフ » 斉藤徹 » 複素数のクラスと隠蔽化

2012年4月
« 3月   5月 »
1234567
891011121314
15161718192021
22232425262728
2930  

最近の投稿(電子情報)

アーカイブ

カテゴリー

複素数のクラスと隠蔽化

前回までで、オブジェクト指向でのクラスの説明が終わったので、 class宣言の外にメソッド実体を書く方法(クラス限定子"::")や、 inline宣言などを説明し、実際の例として複素数クラスを用いて演習にとりかかってもらう。

// 直交座標系
class Complex {
private:
double  re , im ;
public:
inline Complex( double r , double j )
: re( r ) , im( j ) {}
inline void print() {
printf( "%lf + j%lf" , re , im ) ;
}
inline void add( Complex& z ) {
re += z.re ;
im += z.im ;
}
} ;
void main() {
Complex a( 1 , 2 ) ;
Complex b( 2 , 3 ) ;
a.add( b ) ;
a.print() ;
}
// 極座標系
class Complex {
private:
double  ab , th ;
public:
inline Complex( double r , double j )
: ab( sqrt( r*r + j*j  ) ) , th( atan2( j , r ) ) {}
inline void print() {
printf( "%lf ∠ %lf" , ab , th ) ;
}
inline void add( Complex& z ) {
// 演習のネタ
}
} ;

直交座標系のクラスと、極座標系のクラスにて、 複素数の加減乗除のメソッドを実装し、 これにより隠蔽化が可能で、クラス内を変更(リファクタリング) しても利用者に影響が少なくできることを体感してもらう。