c++ - 如何让一组不同的子类对象共享另一组基类的一个静态变量?

标签 c++ inheritance static

我在这里得到了很多帮助,这是我第一次提出问题,如果我犯了任何愚蠢的错误,请原谅我。谢谢!

我有一个名为 Car 的基类,其中有一个供派生类共享的静态变量。例如

class Car {
    static int mileage;
}

然后我为汽车的不同组件创建了一系列子类,例如enginewheelbody ...他们都共享/修改mileage的信息。 整个项目可能有多个Car对象,每个Car对象需要包含一组engine组件,wheel , body ...所以我的问题是如何声明/定义所有这些对象。或者实现这个想法的其他方式是什么?

简单来说,如何制作Engine eng_car1;车轮 whe_car1; Body bod_car1;共享一个static int mileageEngine eng_car2;轮whe_car2; Body bod_car2; 分享另一个static int mileage?

再次感谢!

最佳答案

我会忽略您出于某种原因想要完成里程的事实 static .让一个类别中的所有车辆共享相同的里程值是一个奇怪的要求。但我假设您想要一个更适用的属性的解决方案。

实现目标的一种方法是模板化 Car并且有两个专长:

template <int N> struct Car;

template<> struct Car<1>
{
    static int mileage;
};

template<> struct Car<2>
{
    static int mileage;
};

您可以用枚举替换 1 和 2 以提高可读性。或者使用 typedef

这种方法的优点是两个实例化将各自获得自己的 mileage ;这就是你想要的。

然后,继承自Car<1>Car<2>作为适当的。如果需要,您可以让模板继承自公共(public)基类。

不要忘记为两者保留存储空间 static s 恰好在一个编译单元中,否则您将遇到链接时错误。

关于c++ - 如何让一组不同的子类对象共享另一组基类的一个静态变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34675038/

相关文章:

c++ - 返回小结构的虚函数 - 返回值与输出参数?

c# - 在运行时获取继承的对象类型

c# - C# : How to do constructor chaining, 的初学者覆盖和使用 :this/:base?

c++ - 您将如何在 GMP 中申报大量?

c++ - OpenCV 转换为()

c++ - 在我的项目中包含 winnt.h

java - 检查父类(super class)的对象中是否存在成员变量?

html - maven中的静态html网页

java - 通过搜索堆转储以编程方式查找正在运行的 Java 应用程序的值等的 VisualVM 等软件的替代方案?

c++ - 在静态函数中初始化静态变量导致未解决