子类是不是共享 C++ 中父类的静态变量? [复制]

Posted

技术标签:

【中文标题】子类是不是共享 C++ 中父类的静态变量? [复制]【英文标题】:Do sub-classes share static variables of parent class in C++? [duplicate]子类是否共享 C++ 中父类的静态变量? [复制] 【发布时间】:2012-01-02 21:16:25 【问题描述】:

可能重复:Are static members inherited? (C++)

如果我有一个父类 (Base) 并且它有一个静态的 std::map,那么 BaseBase 的孩子是否都共享相同的 std::map?如果没有,我怎样才能让他们分享?

【问题讨论】:

你有没有想过……试试看? 相关问题:***.com/questions/998247/… @Gnawme:这是同一个问题。 没有。这是由完全相同的人以完全相同的答案提出的完全相同相同的问题。这不是一个不同的问题。 那么Keand64和Linux_ios.rb.cpp.c.lisp.m.sh是同一个人吗? 【参考方案1】:

是的,他们都分享:

class A 
protected:
    static std::map<int,int> x;

public:
    static void push(int a, int b)  x[a] = b; 
;

class B : public A 
public:
    static int size()  return x.size(); 
;

int main() 
    A::push(5,3);
    A::push(4,2);
    std::cout << B::size() << "\n";  // Displays "2"

当然,除非其中一个子类声明了自己的同名成员变量,在这种情况下,基类版本将被隐藏。

【讨论】:

【参考方案2】:

每个类都有一次静态成员变量。当有一个派生自它的类时,为什么要以某种方式改变?也就是说,所有派生类都共享基类的静态成员。

【讨论】:

那么如果我添加"foo"-&gt;"bar"这对,那么这些更改将在孩子之间共享? 如果你把它添加到基类的静态成员中:是的。【参考方案3】:

您使派生类中的非限定名称通过不做任何事情来隐藏它来找到父实现。如果您在派生类中重新定义了具有该名称的成员,则会找到该名称而不是父类的静态成员。

【讨论】:

以上是关于子类是不是共享 C++ 中父类的静态变量? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

java中父类和子类初始化顺序

java中父类的方法已经被覆盖那子类还能用super关键字调用父类的方法吗

C++中父类和子类的成员函数同名同参数同返回只是父类里面是虚函数,子类没有虚函数限定 有问题吗

关于C++父类与子类之间变量的问题

java多态中父类和子类一定要有一样的方法名吗

Java 中父类怎么调用子类的方法?