多态性可以应用于 C++ 中的组合吗?

Can polymorpism be applied to composition in c++?

我正计划使用 classes 和其他 OOP 技术制作 2d 棋盘游戏 。我对 多态性 了解一点,想知道 多态性 中使用的技术是否可以将职责委托给 children class 基础 class 可通过 组合应用。

[已编辑] 一个棋盘 players.I 想要多态调用两个玩家定义的方法函数 move 而不必说 player1.move(), player2.move()

可以实现,你的例子是什么?

前言

不要迷失在设计模式或设计技术中。这个问题看起来像一个 XY 问题。总是退后一步,考虑你想要实现的目标。

目标

要求双方玩家移动的单个呼叫。

TL;DR

如果没有其他背景,我会说直接打电话给他们!

说明

总的来说:

  • 一个棋盘上总是有两个棋手。 (除非你正在设计专门的规则)
  • 国际象棋流程始终以循环方式运行(首先,然后是第二个,然后重复)。

那么国际象棋流程控制器调用两个玩家以固定顺序移动有什么问题?

如果应用多态性来替换以下代码,您会得到什么?

void begin_round(){
   player1.move();
   player2.move(); 
}

你可以通过移动来节省两行字...嘿等等!这就是 begin_round() 所做的! 多态性方法并没有节省任何东西,反而增加了系统的复杂性,这对系统设计来说是一个不好的迹象。

大多数时候,尽可能愚蠢的设计比复杂的方法要好,除非这种设计可以节省大量的维护或开发资源。如果一个设计不能节省任何东西,那么除非它是必须的,否则不要使用它。

其他

组合在您的案例中很常见,因为 gamea board and two players.

的组合