// ( o10.C ) // オブジェクトを知識ベ−スに利用する−その1 // /* 問題: 線分が1本以上あるものを形状という。 線分が3本あるものを形状の中で特に3角形という。 では線分が4本あるものは、一体何か。0本ではどうか。 */ #include class Shape { // Shape クラスのオブジェクトの protected: // senbun_num の値は1である。 int senbun_num ; public: Shape() { senbun_num = 1 ; /* これが知識である */ } virtual void answer( int i ) { if ( i > senbun_num ) cout << "これは形状です\n" ; else cout << "これは形状ではありません\n" ; } } ; class Triangle: public Shape { // Triangle クラスのオブジェクトの public: // senbun_num の値は3である。 Triangle() { senbun_num = 3 ; /* これが知識である */ } void answer( int i ) { if ( i == senbun_num ) cout << "これは3角形です\n" ; else cout << "これは3角形ではありません\n" ; } } ; main() { Shape a ; // クラスを知識ベ−スとした場合、基本的にはオブジェク Triangle b ; // トは、1個だけ生成すれば良いと言うのが特徴である。 a.answer( 4 ) ; b.answer( 4 ) ; Shape* database[2] ; // このように知識ベ−スのデ−タベ−スを作ってみた database[0] = &a ; database[1] = &b ; for ( int i=0;i<2;i++ ) database[i]->answer(0) ; } /* [結果] これは形状です これは3角形ではありません これは形状ではありません これは3角形ではありません */