【问题标题】:How can I have a group of different child class objects sharing one static variable of the base class from another group?如何让一组不同的子类对象共享另一个组的基类的一个静态变量?
【发布时间】:2016-01-08 10:42:51
【问题描述】:

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

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

class Car {
    static int mileage;
}

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

简单来说,如何让Engine eng_car1; Wheel whe_car1; Body bod_car1;分享一个static int mileageEngine eng_car2; Wheel whe_car2; Body bod_car2;分享另一个static int mileage

再次感谢!

【问题讨论】:

  • 考虑到不同的汽车有不同的里程,将变量设置为static 是没有意义的。汽车的不同部分也不是Car 的实际“子类”(即继承自Car)。汽车包含几个部件(如发动机、车轮等),但这些部件本身并不是汽车。

标签: c++ inheritance static


【解决方案1】:

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

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

template <int N> struct Car;

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

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

您可以将 1 和 2 替换为枚举以提高可读性。或使用typedefs。

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

然后,根据需要从Car&lt;1&gt;Car&lt;2&gt; 继承。如果需要,您可以让模板继承自一个通用基类。

不要忘记在一个编译单元中为 statics 保留 存储,否则会出现链接时错误。

【讨论】:

    猜你喜欢
    • 2013-12-20
    • 2017-03-17
    • 2012-06-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多