静态成员可以单独继承吗?

Lew*_*wis 2 c++ oop inheritance static object

在C++中,我有一个Object类,其中许多其他类继承(即Ball,Paddle和Wall).有没有办法让Object类上的静态成员被每个子类作为单独的静态成员继承?

基本上,我希望Ball,Paddle和Wall每个都有一个静态成员(用于存储绘图的图像),它们是从Object继承的(因为存储图像的数组是所有对象的常见要求),但静态成员是每个球,桨和墙分开.这样每个Ball实例都可以访问球图像,每个Paddle都可以访问球拍图像,依此类推.

如果这不可能,那么允许类似功能的好方法是什么?

编辑:

关于我实际想要完成的更多细节:

我正在进行突围克隆.我有一个Object类,所有游戏对象都从该类继承(Ball,Paddle,Block和Wall).所有这些对象都有一些他们需要访问的图像以便绘制自己(这是由Object*对std :: list中的所有对象完成并在所有对象上运行虚拟方法updateAndDraw()).

现在,Ball,Paddle,Block和Wall都有一个静态的sf :: Texture(来自SFML)数组,它存储了对象所需的所有图像.它是静态的,因为每个类的所有实例都可以共享图像,并且为每个实例单独加载它们将浪费内存.在第一次构造每个相应游戏对象时,图像被加载并存储在阵列中.

对于所有游戏对象,图像加载和存储功能基本相同,因此我想将其从每个单独的游戏对象移到对象上.我的计划是在Object上有一个静态成员,每个游戏对象都会继承,并且这个静态成员对于Ball,Paddle,Block和Wall中的每一个都是独立的,虽然它现在看起来像这样可能不起作用.我也会在Object上调用一个静态方法loadImages(string filenames[]),它会获取一个图像文件名数组,并将图像加载到loadImages()被调用的游戏对象的静态图像数组中.所以在Ball构造函数中,如果我运行loadImages()并传递了一些文件名,它会将图像加载到Ball的静态图像数组中,并且相同(独立地)加载所有其他游戏对象.

在输入这一切之后,我意识到将图像存储在其他地方可能会更好,并且只是给游戏对象提供指向那些图像的指针.这消除了图像数组是静态的需要,并且在构造函数中我可以在存储图像的任何内容上调用函数并将其传递给对象类型,它将向我提供一个指向游戏图像的指针数组对象需要.

Sal*_*iti 7

不,不可能.但是,您可以在每个子类中重新声明静态变量.

class A
{
public:
    static int MyStatic;
};

class B : public A
{
public:
    static int MyStatic;
}

class C : public A
{
public:
}
Run Code Online (Sandbox Code Playgroud)

A :: MyStatic与C :: MyStatic相同,但B :: MyStatic不同.我仍然不明白你为什么要这样做.

但是,您也可以使用模板.

template <typename T>
struct MyStaticContainer
{
    static int MyStaticValue;
}

template <typename T>
int MyStaticContainer<T>::MyStaticValue = 0;
Run Code Online (Sandbox Code Playgroud)

然后,您可以通过以下方式访问您的字段:

MyStaticContainer<A>::MyStaticValue = 10;
MyStaticContainer<B>::MyStaticValue = 20;
MyStaticContainer<C>::MyStaticValue = 30;
Run Code Online (Sandbox Code Playgroud)

这些实际上是3个不同的静态字段.