가능한 중복 :
Are static members inherited? (C++)하위 클래스는 C++에서 부모 클래스의 정적 변수를 공유합니까?
내가 부모 클래스 (Base
)가하고 정적 std::map
이 Base
수행하고 Base
의 아이들이 모두 같은 std::map
를 공유하는 경우? 그렇지 않다면 어떻게 공유 할 수 있습니까?
가능한 중복 :
Are static members inherited? (C++)하위 클래스는 C++에서 부모 클래스의 정적 변수를 공유합니까?
내가 부모 클래스 (Base
)가하고 정적 std::map
이 Base
수행하고 Base
의 아이들이 모두 같은 std::map
를 공유하는 경우? 그렇지 않다면 어떻게 공유 할 수 있습니까?
예, 그들은 모두 공유 :
물론, 하위 클래스 중 하나가 기본 클래스 버전이 숨겨집니다이 경우 같은 이름을 가진 자신의 멤버 변수를 선언하지 않는 한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"
}
.
정적 멤버 변수는 클래스 당 한 번 있습니다. 왜이 클래스에서 파생되는 클래스가있을 때 어떻게 변경해야합니까? 즉, 파생 된 모든 클래스는 기본 정적 멤버를 공유합니다.
그래서 "foo"-> "bar"쌍을 추가하면 그 변경은 아이들 사이에 공유 되나요? – Linuxios
기본 클래스의 정적 멤버에 이것을 추가하면 : yes입니다. –
파생 클래스의 수식어가없는 이름을 숨기려면 아무 것도하지 않음으로써 상위 구현을 찾습니다. 파생 된 클래스에서 그 이름을 가진 멤버가 재정의 된 경우 부모의 정적 멤버 대신 해당 멤버가 발견됩니다.
당신은 그렇게 생각하고 시도해 보셨습니까? –
관련 질문 : http://stackoverflow.com/questions/998247/are-static-members-inherited-c – Gnawme
@Gnawme : 그것은 같은 질문입니다. – Linuxios