2016-03-28 147 views
0

我有,有一个成员C++ - 派生类是否继承基类的静态成员?

static Cell **grid; 

我也得到了一个派生类的字符是另一类Player中的基类的基类游戏物体。所以我的问题是:GameObject,Character和Player类的所有对象是否都可以访问同一个网格?

回答

2

PlayerCharacter,其GameObject。所以是的,他们都可以访问静态的grid

......当然受访问保护(正如Sam指出的那样)。所以,你需要一个publicprotected区域内声明grid这是真实的,而且,你需要使用protectedpublic模式声明继承:

class GameObject 
    { 
protected: 
    static Cell **grid; 
    }; 

class Character : protected GameObject 
    { 
    }; 
+0

如果'Character'从'GameObject'私下继承,它仍然可以访问'GameObject :: grid'。从“Character”派生的类将无法访问。 – Peter

1

的规则是否静态类成员基类是可供立即派生类中,最派生类,或二者之间的任何其它类的类层次结构取决于:

  • 静态类成员是否是公共的,受保护的,还是私人的。

  • 在继承链中,每个类是继承基类作为公共类,受保护的类还是私有类。

所以你的问题的答案是:依赖。取决于这些因素。

+0

对不起。我应该补充说它是基类的受保护成员 –

+0

并且派生类从其各自的基类公开继承 –

+0

公开派生或受保护地(即使是一个词?)继承基类的受保护成员的类,并且它们在派生类中受到保护。派生私有继承基类的受保护成员的类,并且它们在派生类中是私有的。 –

1

我相信,除非您明确使用保护修饰符,否则此属性将被视为私有。在你的例子中,你没有用保护public作为它的前缀,所以它将被认为是私有的,因此在派生类中不可访问。

+0

这取决于该类是否用'class'或'struct'关键字声明。 –

相关问题