通过在基类中声明虚拟对派生类所做的更改

时间:2013-09-11 22:37:12

标签: c++

我正在从我目前的OOP课程中编写一个野生动物园课程。野生动物园有老虎,狮子和长颈鹿。动物来自基类动物。现在,我应该实现一个CountTigers例程。但是,我应该这样做“不改变”狮子和长颈鹿课程。这个项目有许多其他方面(GUI,动物删除,菜单等,鼠标事件) - 有些我可能无意中做到这一点。

现在,CountTigers例程应该包含在Safari类中,该类包含safari中所有动物的列表。我的目标是遍历动物列表,并检查当前Animal是否为Tiger并返回表示Tigers数量的值。我可以通过在我的Animals类中包含一个虚函数并仅在Tigers类中实现它来轻松完成。

Class Animal:
  ....
  virtual bool IsTiger();

Class Tiger: public Animal
  ....
  virtual bool IsTiger(return true;)

我现在可以遍历动物列表并检查每只动物的IsTiger。我的问题是,因为我已经在Animal中声明了一个虚函数,即使没有实现虚函数,我是否“改变”长颈鹿和狮子类?

1 个答案:

答案 0 :(得分:0)

好吧,你应该通过“不改变”这些课程来澄清教师的意思,但我怀疑他的意思是“不要改变那些课程中的任何代码,但改变动物很好”。我要做的是有一个Tigers数量的计数器(作为Tiger的静态数据成员或Safari对象),在Tiger构造函数中添加1,并在Tiger析构函数中减去1。然后countTigers()方法可以返回该值。