如果我有一个父类(Base
)并且它有一个静态std::map
,那么Base
和Base
的孩子都会共享同一个{{1} }?如果没有,我怎么能让他们分享呢?
答案 0 :(得分:7)
是的,他们都分享了它:
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"
}
当然,除非其中一个子类声明自己的成员变量具有相同的名称,否则基类版本将被隐藏。
答案 1 :(得分:1)
每个类都有一次静态成员变量。当有一个类派生出来时,为什么要以某种方式改变呢?也就是说,所有派生类都共享基类的静态成员。
答案 2 :(得分:1)
您在派生类中使非限定名称通过不执行任何操作来查找父实现以隐藏它。如果您在派生类中重新定义了具有该名称的成员,那么将找到该成员而不是父项的静态成员。