子类对象,用作定义为c++基类类型的参数

subclass object used as parameters which are defined as base class type C++

本文关键字:基类 c++ 类型 参数 定义 对象 子类      更新时间:2023-10-16

我在《设计模式》一书中读到一个例子:

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()。当我做这种操作时,我应该注意什么?

我也不清楚为什么有时子类函数仍然是虚拟的(它们是基类中的虚拟函数),这是否有一些优势?

谢谢你的帮助!

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

关键字virtual在继承类中是可选的。如果它存在或不存在,该方法将是虚的,因为您正在重写基类的方法。我个人更喜欢在继承类中使用它,以显示它是虚拟的,而不是一个常规方法。