【问题标题】:C++ constructor with abstract class具有抽象类的 C++ 构造函数
【发布时间】:2018-06-10 14:04:05
【问题描述】:

我有一个名为士兵的类,在我的项目中,每个士兵都必须拥有一把武器,我有 5 种不同类型的武器,每种武器类型都继承自“武器”类。 如何在士兵类中创建一个构造函数,以便士兵可以获得任何类型的武器? 我想过为每种武器制作 5 个不同的构造函数,但这没有多大意义

【问题讨论】:

  • Get a couple of good beginners books 了解继承和多态性
  • 有一个构造函数,通过引用或指针(或智能等价物)接受Weapon,然后以某种方式注册提供的武器。查找多态性。
  • @Peter 喜欢这个士兵(武器和武器)?
  • @Liana - 这是一种方式(至少,就构造函数的参数列表而言)。

标签: c++ constructor multiple-inheritance


【解决方案1】:

假设武器是所有武器的基类。假设您有 2 种武器类型 Gun 和 Knife:

class Weapon { virtual void shot() = 0; }

class Gun : public Weapon { virtual void shot() { cout << "Gun"; }


class Knife : public Weapon { virtual void shot() { cout << "Knife"; }

class Soldier {
   Weapon *weapon;
  public:
   Soldier() : weapon(nullptr) {}
   Soldier(Weapon* w) : weapon(w) {}
   void SetWeapon(Weapon* w) { weapon = w; }
   Weapon* GetWeapon() { return weapon; }
}

在 Real word 代码中,您可以考虑使用 RAII 或 smart_pointers 来保存和删除 Weapon* 对象,否则可能会发生内存泄漏。

【讨论】:

    【解决方案2】:

    在您的士兵课程中,您可以拥有以下内容:

    #include "weapon.h"
    
    class Soldier {
        Weapon *weapon;
    public:
        Soldier(Weapon *weapon) {
            this->weapon = weapon;
        }
    };
    

    当你要实例化班级士兵时:

    Weapon *w1 = new Knife(), *w2 = new M1();
    Soldier s1(w1), s2(w2);
    

    【讨论】:

    • 如果您要否决我的回答,请发表评论,解释原因。我不明白,因为人们对我的回答投了反对票。
    猜你喜欢
    • 2014-10-07
    • 2023-03-04
    • 2011-08-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-17
    • 2015-06-03
    • 2015-05-30
    • 2013-11-17
    相关资源
    最近更新 更多