2012-01-02 2 views
1

가능한 중복 :
Are static members inherited? (C++)하위 클래스는 C++에서 부모 클래스의 정적 변수를 공유합니까?

내가 부모 클래스 (Base)가하고 정적 std::mapBase 수행하고 Base의 아이들이 모두 같은 std::map를 공유하는 경우? 그렇지 않다면 어떻게 공유 할 수 있습니까?

+2

당신은 그렇게 생각하고 시도해 보셨습니까? –

+0

관련 질문 : http://stackoverflow.com/questions/998247/are-static-members-inherited-c – Gnawme

+0

@Gnawme : 그것은 같은 질문입니다. – Linuxios

답변

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

정적 멤버 변수는 클래스 당 한 번 있습니다. 왜이 클래스에서 파생되는 클래스가있을 때 어떻게 변경해야합니까? 즉, 파생 된 모든 클래스는 기본 정적 멤버를 공유합니다.

+0

그래서 "foo"-> "bar"쌍을 추가하면 그 변경은 아이들 사이에 공유 되나요? – Linuxios

+0

기본 클래스의 정적 멤버에 이것을 추가하면 : yes입니다. –

1

파생 클래스의 수식어가없는 이름을 숨기려면 아무 것도하지 않음으로써 상위 구현을 찾습니다. 파생 된 클래스에서 그 이름을 가진 멤버가 재정의 된 경우 부모의 정적 멤버 대신 해당 멤버가 발견됩니다.

관련 문제