如何继承静态成员?

Posted

技术标签:

【中文标题】如何继承静态成员?【英文标题】:How inherit static members? 【发布时间】:2014-01-19 22:55:42 【问题描述】:

我正在努力让我的派生类按照我的意愿继承静态成员。

class Base

public:
    static int member;
;

class Derived : Base

;

Derived::member = 2;
Base::member = 0;

因此:Derived::member == 0;

如何实现 Derived::member == 2 的模式?

【问题讨论】:

同时在Derived 上声明static int member。当然,这对于一个可能不存在的问题来说是一个糟糕的解决方案。 duplicate 在从 Base 派生的每个类中声明相同的静态变量似乎不是很“面向对象”。 【参考方案1】:

静态成员不能被继承,因为它们属于声明它们的类(因为它们实际上只是具有一些更高级访问权限的全局变量),但是您的派生类仍然可以访问它们而无需编写Base::(当然它们必须至少是protected)。访问也意味着您可以设置它们。

【讨论】:

【参考方案2】:

您不能继承基类的静态成员变量,因为它们属于类,而不仅仅是类的特定实例。所以所有基类和派生类(以及它们的实例)都将共享同一个静态成员变量,并且所有基类和派生类(以及它们的实例)都会看到它的任何变化。

【讨论】:

以上是关于如何继承静态成员?的主要内容,如果未能解决你的问题,请参考以下文章

java中私有的属性、静态成员可以被子类继承吗?

4CPP 面向对象之 ——多态多继承static 成员const 成员

静态成员是继承的吗?

静态成员和继承

MFC中静态成员函数调用其他类的非静态变量

C++学习:3多态