現在の OOP コースからサファリ クラスを作成しています。サファリにはトラ、ライオン、キリンがいます。動物は基本クラス Animal から派生しています。ここで、CountTigers ルーチンを実装することになりました。ただし、ライオンとキリンのクラスを「変更せずに」これを行うことになっています。このプロジェクトには他にも多くの側面 (GUI、動物の削除、メニューなど、マウス イベント) があります。
ここで、CountTigers ルーチンを Safari クラスに含める必要があります。このクラスには、サファリ内のすべての動物のリストがあります。私の目標は、動物のリストを繰り返し処理し、現在の動物がトラであるかどうかを確認し、トラの数を表す値を返すことでした。これは、Animals クラスに仮想関数を含めて、Tigers クラスだけに実装することで簡単に実行できます。
Class Animal:
....
virtual bool IsTiger();
Class Tiger: public Animal
....
virtual bool IsTiger(return true;)
これで、動物のリストを反復処理して、各動物の IsTiger を確認できます。私の質問は、アニマルで仮想関数を宣言したので、仮想関数を実装しなくてもキリンとライオンのクラスを「変更」しているのでしょうか?