从继承的变量构造派生类

2023-12-02

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

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

现在我的问题是:

如果我有一个具有受保护变量 intstrength 和 intarmor 的基类,如何使用 intstrength 和 intarmor 构造派生类,以便它们获得自己的值,而无需在该类中实际定义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构造函数protected如果您只想派生类构造一个Creature.

如果你想访问盔甲和力量值,你将必须添加 getter 函数,因为盔甲和力量是受保护的成员变量。

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;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

从继承的变量构造派生类 的相关文章

随机推荐

  • 使用 pyudev 仅查找磁盘驱动器

    我希望使用 udev 枚举计算机上的所有硬盘 特别是 pyudev 来枚举所有内容 import pyudev context pyudev Context for device in context list devices subsys
  • sbt 是否有类似于 gradle 的 processResources 任务并支持 ReplaceTokens 的功能?

    我们正在从 Java Gradle 堆栈转向 Scala SBT 我们的 gradle 构建利用名为 processResources 的任务和一些名为 ReplaceTokens 的 Ant 过滤器来动态替换签入的 properties
  • 使用 printf 函数汇编无限循环[重复]

    这个问题在这里已经有答案了 谁能解释一下为什么这段代码会进入无限循环 我认为这与 printf 函数有关 q1 asciz Hello World n global main main movq rsp rbp movq 3 rcx jmp
  • 带有 Java 外键的 MongoDb

    我需要使用 Java 在 MongoDB 中保存两个集合 一个集合在哪里部门其他集合是Employee 如果一个部门可以有许多员工 我想保存一个集合 就像员工唯一 ID 必须映射到我的部门员工列表中一样 Example id ObjectI
  • Dplyr Mutate_each 用于成对的列集

    有没有办法使用 dplyr mutate each 实现以下转换 data frame x1 1 5 x2 6 10 y1 rnorm 5 y2 rnorm 5 gt mutate diff1 x1 y1 diff2 x2 y2 x1 x2
  • HSQL 创建过程语法似乎与文档不匹配

    我使用 HSQL 作为内存测试数据库来运行集成测试 在生产中 我有一个 oracle 10g 数据库 这个想法是运行我用来在 oracle 中创建数据库的数据库创建脚本 以在 hsql 中创建相同的数据库以进行集成测试 我遇到了有关语法差异
  • 边缘检测后获取边缘坐标(Canny)

    我使用 OpenCV 的时间相当短 并对图像执行了 Canny 边缘检测 之后还执行了膨胀以进一步将对象 在我的例子中是一个正方形 与背景分开 我现在的问题是使用一种算法来识别二维中的可抓取区域 该算法要求我处理这些边缘中的点的坐标 有没有
  • 什么是纯 SVG,什么是 SMIL?

    Context 我正在制作 SVG 信息图 我希望通过动画让文档变得栩栩如生 尤其是动画链接动画 我已经熟悉 SVG 但最近才开始学习 SVG 动画 由于 SMIL 已被弃用 我正在尝试用纯 SVG 制作动画 看看这篇文章 尤其是Handy
  • HTML canvas JavaScript 库和框架的当前技术水平如何? [关闭]

    Closed 这个问题是基于意见的 目前不接受答案 我目前正在研究在新的 HTML 5 应用程序中使用画布的选项 并且想知道 HTML 画布 JavaScript 库和框架的当前技术水平是什么 特别是 是否有框架支持游戏开发所需的东西 复杂
  • Swift:如何单击按钮打开新窗口?

    我是这种编程语言的新手 我想创建一个应用程序 当我单击按钮时打开一个包含一些信息的窗口 但我不知道该怎么做 我不使用故事板 因为我读到对于专业编程来说这些不起作用 我不想要 iOS 我想要 OS X 向大家问好 那很简单 您可以执行以下操作
  • 将 spring-batch-admin 集成到现有的 spring boot 后无法导入属性

    我曾经做过一个使用 spring batch 和 spring boot 的项目 我遵循了如何集成它的确切规则 1 删 除所有 EnableBatchProcessing 2 添加ServletConfiguration和WebappCon
  • 在 Razor 视图中根据需要创建字段

    我想在剃刀视图中根据需要创建一个文本框字段 我无法使用验证属性 Required 因为字段名称是动态生成的 我检查了这个答案这设置了data val required字段到true使用 JavaScript 有没有其他方法可以做到这一点 因
  • 突出显示 matplotlib 图中的任意点

    我是 python 和 matplotlib 的新手 我试图突出显示 matplotlib 中现有绘图中符合特定标准的几个点 初始绘图的代码如下 pl plot t y pl title Damped Sine Wave with 1f H
  • IntelliJ IDEA + Gradle - 如何记录从 IDE 运行的长时间运行的 Gradle 任务?

    IntelliJ IDEA 有时需要很长时间来执行 Gradle 刷新任务或运行 Gradle 任务 它会旋转很长一段时间 让你想知道它到底旋转了多远 或者它是否在做任何事情或冻结了 例如 这已经运行了很长时间 但我没有办法看到发生了什么
  • Java中的字符串表示

    字符串在 Java 中表示为对象 因此 一个对象包含存储在实例变量对象内 对象还包含对该对象进行操作的代码体 这些代码体称为methods 包含相同类型值和相同方法的对象被分组为类 类可以被视为这些对象的类型定义 那么 Java中的Stri
  • 检查或查找值是否存在于另一列中

    这应该很容易 但我就是不明白出了什么问题了 我有 3 列 第一列和第三列有数字 我希望第二列显示第 1 列中的数字是否存在于第 3 列中 我在网上找到了一个代码 IF ISERROR VLOOKUP A7 C 2 C 3400 1 FALS
  • ASP.Net MVC 长时间运行进程

    我需要为不同的财务周期生成报告屏幕 由于这是一个相当大的数据集 包含很多规则 因此该过程可能需要很长时间才能运行 某些报告返回需要一个多小时 在 MVC 中处理这种情况的最佳方法是什么 我担心 屏幕锁定 表现 可用性 请求超时 这些确实是合
  • 如何在Xcode中使用svn合并冲突(文件project.pbxproj)?

    我们团队中有两名成员 我们使用Xcode的SCM 使用SVN 来管理我们的源代码文件 我们都将文件添加到我们的 Xcode 项目中 他已经致力于SVN服务器 当我更新时 Xcode发现有冲突project pbxproj文件 然后我选择退出
  • 为什么在 Ruby 中 splat 后可以有必需参数,但不能有可选参数? [复制]

    这个问题在这里已经有答案了 这在 Ruby 中是可能的 class SomeClass def initialize a b c end end 但这不是 class SomeClass def initialize a b c anyth
  • 从继承的变量构造派生类

    也许标题有点令人困惑 所以我会尽力确保它尽可能清晰 基本上 我正在尝试创建一个游戏 其中有一个名为 Creature 的抽象基类 并且在其下有几个派生的幻想生物类 现在我的问题是 如果我有一个具有受保护变量 intstrength 和 in