Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/157.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
静态成员可以单独继承吗? C++中,我有一个对象类,从中继承了许多其他类(ie Ball、Paddle和墙)。有没有一种方法可以让对象类上的静态成员作为单独的静态成员被每个子类继承_C++_Oop_Inheritance_Object_Static - Fatal编程技术网

静态成员可以单独继承吗? C++中,我有一个对象类,从中继承了许多其他类(ie Ball、Paddle和墙)。有没有一种方法可以让对象类上的静态成员作为单独的静态成员被每个子类继承

静态成员可以单独继承吗? C++中,我有一个对象类,从中继承了许多其他类(ie Ball、Paddle和墙)。有没有一种方法可以让对象类上的静态成员作为单独的静态成员被每个子类继承,c++,oop,inheritance,object,static,C++,Oop,Inheritance,Object,Static,基本上,我希望Ball、Pable和Wall都有一个从对象继承的静态成员(用于存储用于绘制的图像)(因为存储图像的数组是所有对象的共同要求),但是Ball、Pable和Wall的静态成员是分开的。这样,每个球实例都可以访问球图像,每个桨都可以访问桨图像,依此类推 如果这是不可能的,那么什么是允许类似功能的好方法 编辑: 关于我真正想要实现的目标的更多细节: 我正在做一个突破克隆。我有一个对象类,所有游戏对象都从中继承(球、桨、块和墙)。所有这些对象都有一些图像,它们需要访问这些图像才能绘制它们自

基本上,我希望Ball、Pable和Wall都有一个从对象继承的静态成员(用于存储用于绘制的图像)(因为存储图像的数组是所有对象的共同要求),但是Ball、Pable和Wall的静态成员是分开的。这样,每个球实例都可以访问球图像,每个桨都可以访问桨图像,依此类推

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

编辑:

关于我真正想要实现的目标的更多细节:

我正在做一个突破克隆。我有一个对象类,所有游戏对象都从中继承(球、桨、块和墙)。所有这些对象都有一些图像,它们需要访问这些图像才能绘制它们自己(这是由Object*对std::list中的所有对象执行的,并在所有对象上运行虚拟方法updateAndDraw()

现在,球、桨、块和墙都有一个静态sf::Texture(来自SFML)数组,用于存储对象所需的所有图像。它是静态的,因为每个类的所有实例都可以共享图像,而为每个实例分别加载它们将是一种内存浪费。在第一次构建每个相应的游戏对象时,图像被加载并存储在阵列中

图像加载和存储功能对于所有游戏对象基本上是相同的,所以我想把它从每个单独的游戏对象中移到另一个对象上。我的计划是在每个游戏对象将继承的对象上有一个静态成员,这个静态成员对于球、桨、挡和墙都是独立的,尽管现在看起来这可能不起作用。我还将在名为
loadImages(stringfilenames[])
的对象上使用一个静态方法,该方法将获取一个图像文件名数组,并将图像加载到调用
loadImages()
的游戏对象的静态图像数组中。因此,在Ball构造函数中,如果我运行
loadImages()
并向其传递一些文件名,它会将图像加载到Ball的静态图像数组中,并(独立地)加载到所有其他游戏对象中


输入完这些之后,我意识到将图像存储到其他地方可能更好,只需给游戏对象提供指向这些图像的指针。这样就不需要图像数组是静态的,在构造函数中,我可以对存储图像的任何对象调用一个函数,并将对象类型传递给它,它将向我提供一个指向游戏对象所需图像的指针数组。

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

class A
{
public:
    static int MyStatic;
};

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

class C : public A
{
public:
}
A::MyStatic与C::MyStatic相同,但B::MyStatic不同。 我还是不明白你为什么要这样做

但是,您也可以使用模板

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

template <typename T>
int MyStaticContainer<T>::MyStaticValue = 0;
模板
结构MyStaticContainer
{
静态值;
}
模板
int MyStaticContainer::MyStaticValue=0;
然后,您可以通过以下方式访问字段:

MyStaticContainer<A>::MyStaticValue = 10;
MyStaticContainer<B>::MyStaticValue = 20;
MyStaticContainer<C>::MyStaticValue = 30;
MyStaticContainer::MyStaticValue=10;
MyStaticContainer::MyStaticValue=20;
MyStaticContainer::MyStaticValue=30;

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

可能最容易将所有这些字段作为非静态成员。考虑使用一个名为“GeMimaGeSe())的虚拟函数(或任何适当的),这样基类就可以访问类特定的图像,而不必知道派生类的细节。
在我提出最终建议之前,了解更多关于您的类设计以及这些方法和成员应该做些什么会很有帮助。Salvatore关于使用模板的建议也可能是合适的,但模板经常被滥用,因为继承或委托模型就足够了。

请参见,我将创建一个单独的非静态类来提供图像,并在构建过程中为每个类提供这些图像。然后,只需为这些映像存储库类中的每个类创建一个实例,并在创建时将它们传递给每个新的对象类。基本上,我会完全避免
静态
,因为它使重构程序变得更加困难,并且使编写自动化测试变得更加困难。