【问题标题】:How can I implement this class in Polymorphism c++?如何在多态 C++ 中实现这个类?
【发布时间】:2026-02-17 20:55:02
【问题描述】:

我正在制作游戏。我计划有 4 种敌人类型。我已经为其中一个人做了一个课程。

我是 C++ 新手,我总是对多态性以及如何以及何时使用它感到困惑。

我需要知道如何创建一个作为所有 4 个敌人类的基础的类。

我知道使用 OOP 的优点之一是使用的代码更少,这意味着它很高效。我并不是真的要求你为我编写一个完整的类,只是问我如何在这种情况下使用多态性。这是 4 个敌人类别中的 1 个。 (如果没有多态,它们看起来完全一样,唯一会改变的是chanceOfLoss 变量)

class Punk
{
    public:
        Punk(Player player)
        {
            chanceOfLoss = 50;
            this->player = player;
        }
        bool Fight()
        {
            chanceOfWin = chanceOfLoss + player.GetWeapon();
            randNum = 1 + rand() % 100;

            if (randNum <= chanceOfWin)
            {
                return true;
            }
            return false;
        }
    private:
        Player player;
        int chanceOfLoss;
        int randNum;
        int chanceOfWin;
};

【问题讨论】:

  • 如果不同的敌人类型只是chanceOfLoss的值不同,那么你不应该使用类型层次结构。如果敌人类型的行为不同,请使用类型层次结构。
  • 我很同情 nosid 评论:在这种情况下不要使用继承,只需为 chanceOfLoss 添加一个 setter 和一个 getter。
  • 我认为您在这里混淆了核心 OOP 原则。 C++ 中的 [多态性][1] 使您能够在抽象上编程,而不是在实现上编程。 [继承][2] 使您能够为多个类编写通用功能。请参考以下问题:[链接][3]。 [1]:en.wikipedia.org/wiki/… [2]:en.wikipedia.org/wiki/… [3]:*.com/questions/10973949/…

标签: c++ class oop polymorphism


【解决方案1】:

以下是在这种情况下如何使用多态性的示例。 您应该根据所有设计考虑因素考虑它是否是最佳选择。

class BaseEnemy 将是你敌人的基类。每个敌人类型都将从它继承,并覆盖getChanceofLoss 方法。 所有敌人将共享相同的Fight 方法

class BaseEnemy
{
public:
   bool Fight()
   {
      chanceOfWin = getChanceOfLoss() + player.GetWeapon();
      ...
   }
   virtual int getChanceOfLoss() = 0;
}

class Punk: public BaseEnemy
{
public:
   virtual int getChanceOfLoss() { return 60; }    
}

【讨论】:

  • 这太棒了。我也明白。 Base 类的虚方法必须被派生类的方法覆盖,并返回其对应的 chanceOfLoss 值。非常感谢。
  • 我没有投反对票,我尝试按向上箭头,但它说我需要 15 个代表,因此它决定删除 1