【发布时间】:2016-03-28 01:18:06
【问题描述】:
我有一个基类 GameObject,它有一个成员
static Cell **grid;
我还有一个派生类 Character,它是另一个 Player 类的基类。所以我的问题是:GameObject、Character 和 Player 类的所有对象都可以访问同一个网格吗?
【问题讨论】:
标签: c++ inheritance static
我有一个基类 GameObject,它有一个成员
static Cell **grid;
我还有一个派生类 Character,它是另一个 Player 类的基类。所以我的问题是:GameObject、Character 和 Player 类的所有对象都可以访问同一个网格吗?
【问题讨论】:
标签: c++ inheritance static
Player是一个Character,是一个GameObject。所以是的,他们都可以访问静态grid。
...当然受到访问保护(正如 Sam 所指出的)。因此,您需要在 public 或 protected 区域内声明 grid 才能实现这一点,此外,您需要使用 protected 或 public 模式声明继承:
class GameObject
{
protected:
static Cell **grid;
};
class Character : protected GameObject
{
};
【讨论】:
Character 私有地继承自GameObject,它仍然可以访问GameObject::grid。从Character 派生的类将无权访问。
在类层次结构中,基类的静态类成员是否可用于直接派生类、最派生类或介于两者之间的任何其他类的规则取决于:
静态类成员是公共的、受保护的还是私有的。
以及,在继承链中,每个类是否将基类继承为公共类、受保护类或私有类。
所以你的问题的答案是:取决于。取决于这些因素。
【讨论】:
我相信,除非您明确使用 protected 修饰符,否则此属性将被视为私有。在您的示例中,您没有使用 protected 或 public 作为前缀,因此它会被视为私有,因此无法在派生类中访问。
【讨论】:
class 还是struct 关键字声明的。