複素数のクラスと隠蔽化
前回までで、オブジェクト指向でのクラスの説明が終わったので、 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 ) { // 演習のネタ } } ;
直交座標系のクラスと、極座標系のクラスにて、 複素数の加減乗除のメソッドを実装し、 これにより隠蔽化が可能で、クラス内を変更(リファクタリング) しても利用者に影響が少なくできることを体感してもらう。