C++ 从继承变量构造派生类

C++ 从继承变量构造派生类,c++,class,inheritance,constructor,polymorphism,C++,Class,Inheritance,Constructor,Polymorphism,也许标题有点混乱,所以我会尽最大努力确保它尽可能清晰 基本上,我正在尝试创建一个游戏,其中有一个抽象的基类叫做“生物”,下面有几个派生的幻想生物类 现在我的问题是: 如果我有一个基类,它有受保护的变量int-strength和int-armar,那么我如何使用int-strength和int-armar构造一个派生类,以便它们获得自己的值,而不在该类中实际定义strength和armar变量 让我来写我想要实现的代码 class Creature { public: Creature

也许标题有点混乱,所以我会尽最大努力确保它尽可能清晰

基本上,我正在尝试创建一个游戏,其中有一个抽象的基类叫做“生物”,下面有几个派生的幻想生物类

现在我的问题是:

如果我有一个基类,它有受保护的变量int-strength和int-armar,那么我如何使用int-strength和int-armar构造一个派生类,以便它们获得自己的值,而不在该类中实际定义strength和armar变量

让我来写我想要实现的代码

class Creature
{
  public:
    Creature();
  private:
    int armor;
    int strength;
};

class Human: public Creature
{
   public:
      Human(int a, int b): armor(a), strength(b)
      {
      }
};

int main() 
{ 
  Human Male(30, 50);
  cout << Male.armor;
  cout << Male.strength;
  return 0;
}
类生物
{
公众:
生物();
私人:
内部装甲;
内在力量;
};
人类类:公共生物
{
公众:
人类(智力a,智力b):盔甲(智力a),力量(智力b)
{
}
};
int main()
{ 
人类男性(30,50);

cout您可以在基类中创建一个以str和armor为参数的构造函数,然后将它们传递给派生类构造函数中的基类构造函数

class Creature
{
  public:
    Creature(int a, int s) : armor(a), strength(s) {};

protected:
    int armor;
    int strength;
};

class Human: public Creature
{
   public:
      Human(int a, int s) : Creature(a, s) {}
};
class Human: public Creature
{
   public:
      using Creature::Creature;
};
注意:如果您只希望派生类构造一个
生物
,则可以使
生物
构造函数
受保护

如果您想访问armor和str值,您必须添加getter函数,因为armor和strength是受保护的成员变量

class Creature
{
  public:
    Creature(int a, int s) : m_armor(a), m_strength(s) {};

    int armor() const     { return m_armor; }
    int strength() const  { return m_strength; }

protected:
    int m_armor;
    int m_strength;
};
现在可以使用main()函数:

int main() 
{ 
  Human Male(30, 50);
  cout << Male.armor();
  cout << Male.strength();
  return 0;
}
intmain()
{ 
人类男性(30,50);

cout允许在基类的构造函数中设置这些变量:

class Creature
{
  public:
    Creature();
  protected:
    Creature(int armor_, int strength_) : armor(armor_), strength(strength_){}        

    int armor;
    int strength;
};
Human(int armor_, int strength_) : Creature(armor_, strength_){}     
现在在派生类中,只需将这些传递给基类:

class Creature
{
  public:
    Creature();
  protected:
    Creature(int armor_, int strength_) : armor(armor_), strength(strength_){}        

    int armor;
    int strength;
};
Human(int armor_, int strength_) : Creature(armor_, strength_){}     

首先,确保基类具有可以正确初始化其成员变量的构造函数

class Creature
{
  public:

      Creature(int a, int b): armor(a), strength(b) {}

  private:
    int armor;
    int strength;
};
除非派生类有其他需要初始化的成员数据,否则可以使用以下构造来使用基类构造函数,就像它也是在派生类中定义的一样

class Creature
{
  public:
    Creature(int a, int s) : armor(a), strength(s) {};

protected:
    int armor;
    int strength;
};

class Human: public Creature
{
   public:
      Human(int a, int s) : Creature(a, s) {}
};
class Human: public Creature
{
   public:
      using Creature::Creature;
};
现在您可以使用:

int main() 
{ 
  Human Male(30, 50);
  return 0;
}
使用

cout << Male.armor;
cout << Male.strength;
然后将其用作:

cout << Male.getArmor();
cout << Male.getStrength();

对不起,本来应该受到保护的!但是谢谢你的建议。太棒了。非常感谢你!