// ( o11.C ) // オブジェクトを知識ベ−スに利用する−その2 // #include // その1と同じ問題をもう少し考えてみる class Shape { protected: int senbun_num ; public: Shape() { senbun_num = 1 ; } int answer( int i ) { if ( i > senbun_num ) { cout << "これは形状です\n" ; return 1 ; } else { cout << "これは形状ではありません\n" ; return 0 ; } } } ; class Triangle: public Shape { Shape* shape ; public: Triangle() { // ここら辺り、何となく強引な shape = new Shape ; // 気がせんでもないな? senbun_num = 3 ; } ~Triangle() { delete shape ; } int answer( int i ) { if ( shape->answer(i) == 1 ) { // ここで知識を継承している if ( i == senbun_num ) { cout << "これは3角形です\n" ; return 1 ; } else { cout << "これは3角形ではありません\n" ; return 0 ; } } } } ; main() { Triangle a ; // 最終的な派生クラスを、1つ生成するだけで済む a.answer( 4 ) ; a.answer( 0 ) ; } /* [結果] これは形状です これは3角形ではありません これは形状ではありません */