0

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

现在,CountTigers 例程应该包含在 Safari 类中,该类包含 safari 中所有动物的列表。我的目标是遍历动物列表,检查当前动物是否是老虎并返回一个代表老虎数量的值。我可以通过在我的 Animals 类中包含一个虚函数并仅在 Tigers 类中实现它来轻松地做到这一点。

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

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

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

4

1 回答 1

0

好吧,您可能应该澄清老师所说的“不更改”这些课程是什么意思,但我怀疑他的意思是“不要更改这些课程中的任何代码,但是更改 Animal 就可以了”。我要做的是有一个 Tigers 数量的计数器(作为 Tiger 的静态数据成员或在 Safari 对象上),在 Tiger 构造函数中将其加 1,并在 Tiger 析构函数中减去 1。然后 countTigers() 方法可以返回该值。

于 2013-09-12T03:11:36.347 回答