【问题标题】:C++ - Do derived classes inherit static members of the base class?C++ - 派生类是否继承基类的静态成员?
【发布时间】:2016-03-28 01:18:06
【问题描述】:

我有一个基类 GameObject,它有一个成员

static Cell **grid;

我还有一个派生类 Character,它是另一个 Player 类的基类。所以我的问题是:GameObject、Character 和 Player 类的所有对象都可以访问同一个网格吗?

【问题讨论】:

    标签: c++ inheritance static


    【解决方案1】:

    Player是一个Character是一个GameObject。所以是的,他们都可以访问静态grid

    ...当然受到访问保护(正如 Sam 所指出的)。因此,您需要在 publicprotected 区域内声明 grid 才能实现这一点,此外,您需要使用 protectedpublic 模式声明继承:

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

    【讨论】:

    • 如果Character 私有地继承自GameObject,它仍然可以访问GameObject::grid。从Character 派生的类将无权访问。
    【解决方案2】:

    在类层次结构中,基类的静态类成员是否可用于直接派生类、最派生类或介于两者之间的任何其他类的规则取决于:

    • 静态类成员是公共的、受保护的还是私有的。

    • 以及,在继承链中,每个类是否将基类继承为公共类、受保护类或私有类。

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

    【讨论】:

    • 对不起。我应该补充说它是基类的受保护成员
    • 并且派生类从各自的基类公开继承
    • 公开派生或受保护派生的类(甚至是一个词?)继承基类的受保护成员,并且它们在派生类中受到保护。私有派生的类继承基类的受保护成员,并且它们在派生类中是私有的。
    【解决方案3】:

    我相信,除非您明确使用 protected 修饰符,否则此属性将被视为私有。在您的示例中,您没有使用 protectedpublic 作为前缀,因此它会被视为私有,因此无法在派生类中访问。

    【讨论】:

    • 这取决于类是用class 还是struct 关键字声明的。
    猜你喜欢
    • 1970-01-01
    • 2018-11-30
    • 1970-01-01
    • 2014-11-27
    • 2017-04-14
    • 1970-01-01
    • 1970-01-01
    • 2010-10-05
    • 1970-01-01
    相关资源
    最近更新 更多