c++ - 从继承变量构造派生类

标签 c++ class inheritance constructor polymorphism

也许标题有点困惑,所以我会尽力确保它尽可能清晰。

基本上,我正在尝试创建一个游戏,其中有一个名为“Creature”的抽象基类,并且在它下面有几个派生的幻想生物类。

现在我的问题是:

如果我有一个具有 protected 变量 int strength 和 int armor 的基类,我如何使用 int strength 和 int armor 构造一个派生类,以便它们获得自己的值而无需在该类中实际定义 strength 和 armor 变量?

让我编写我要实现的代码。

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;
}

我该怎么做?我需要在第一类中拥有装甲和力量,所以我不能在每个派生类中声明它。

感谢任何帮助。谢谢!

最佳答案

可以在基类中创建一个以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) {}
};

注意:如果您只希望派生类构造一个Creature,您可以使Creature构造函数protected

如果你想访问 armor 和 str 值,你必须添加 getter 函数,因为 armor 和 strength 是 protected 成员变量。

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;
}

关于c++ - 从继承变量构造派生类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35357431/

相关文章:

java - fragment 内的非法封闭实例

java - 哪些行应该取消注释以及为什么、继承

c++ - 如何在保留符号链接(symbolic link)的同时在多阶段 Docker 构建的各个阶段之间复制库文件?

c++ - 为什么此代码不会导致重定义错误?

c++ - 即使删除线程,线程数也会增加很多

c++ - 使用 OpenCV 在 MFC/C++ 应用程序中显示图像

java - secret 可以隐藏在提供访问凭证的 'safe' java 类中吗?

java - 如何在鼠标监听器中添加参数

javascript - 为什么所有这些 Javascript 原型(prototype)继承方法看起来都一样?

c# - 我应该打破哪种模式?