c++ - 继承和良好实践

标签 c++ inheritance

我有几节课

class A;
class B;
class C;
class D;

类 B、C、D 继承自 A。在我的问题中,我有多个类 B、C、D,并且每个类都有一个静态字段,例如

static int gold;

A类是抽象类,它有getGold()方法;

当然每个类B、C、D都有自己的静态字段

static int gold;

在每个类(B、C、D)中,我都以相同的方式实现

getGold()
{
    return gold;
}

它是复制和粘贴,但我不知道如何让它变得更好。

例如B,C,D

  • B是宝箱
  • C是斧头
  • D是剑

同一类的每个对象的成本都相同,所以这就是为什么我只想拥有一个 int 当然这只是示例而不是 int 我可以在那里使用例如 class Gold 实例 :)

最佳答案

如果不需要变化,请使用枚举作为值。

无论如何,返还金币是个不错的主意。如果它更复杂,您可以使用 CRTP。一个从 A 继承并实现的辅助模板。

您将 B 作为模板参数传入,然后从中继承 B。模板的方法可以将 this 静态转换为 B 并使用 B 的状态。

CRTP 很容易用 Google 搜索。

记住,返还金币可能是最好的。

关于c++ - 继承和良好实践,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13504276/

相关文章:

java - 使用 super 作为引用类型时无法访问子类中的方法

c++ - 如何使用模板类作为模板参数在模板类中正确定义模板函数

c++ - 这个类模板的对象创建是如何工作的?

jquery - 防止动态加载 DIV 上的 CSS 继承

c++ - 在对象继承中构造对象后设置较晚的值

Qt信号和继承问题

c++ - 如何在 win32 中获取 HWND?

c++ - "Const"在 C++ 中还做了什么,然后告诉编译器特定的东西是只读的

c++ - 在 Windows 上工作,但在 Ubuntu 上出现段错误

java - 房间: Use class that extends ArrayList as Entity