0

我在“设计模式”一书中读到了一个例子:

Maze* MazeGame::CreateMaze(MazeFactory& factory)
{
  //something to do 
}

class BombedMazeFactory :public MazeFactory
{
  //something to defined
}

int main()
{
   MazeGame game;
   BombedMazeFactory factory;
   game.CreateMaze(factory);
}

因此,子类对象将被发送到使用基类作为参数的 CreateMaze()。当我做这种操作时,我应该注意什么?

我也不清楚为什么有时子类函数仍然是虚拟的(它们是基类中的虚拟函数),这有什么好处吗?

感谢您的大力帮助!

4

1 回答 1

1

您应该这样做以便能够为许多不同的类重用相同的代码。在这种情况下,您可以在 CreateMaze() 函数中使用许多不同的工厂。

关键字 virtual 在继承类中是可选的。如果它存在或不存在,则该方法将是虚拟的,因为您正在覆盖基类的方法。我个人更喜欢在继承类中使用它来表明它是虚拟的而不是常规方法。

于 2013-05-27T20:33:45.163 回答