我在“设计模式”一书中读到了一个例子:
Maze* MazeGame::CreateMaze(MazeFactory& factory)
{
//something to do
}
class BombedMazeFactory :public MazeFactory
{
//something to defined
}
int main()
{
MazeGame game;
BombedMazeFactory factory;
game.CreateMaze(factory);
}
因此,子类对象将被发送到使用baseclass作为参数的CreateMaze()。当我做这种操作时,我应该小心什么?
我也不清楚为什么有时子类函数仍然是虚函数(它们是基类中的虚函数),对此有一些优势吗?
感谢您的大力帮助!
答案 0 :(得分:1)
您应该这样做,以便能够为许多不同的类重用相同的代码。在这种情况下,您可以在CreateMaze()函数中使用许多不同的工厂。
关键字virtual在继承类中是可选的。如果它存在或者不存在,则该方法将是虚拟的,因为您将覆盖基类的方法。我个人更喜欢在继承类中使用它来表明它是虚拟的而不是常规方法。