• 카테고리

    질문 & 답변
  • 세부 분야

    프로그래밍 언어

  • 해결 여부

    미해결

static 멤버변수에서 인스턴스에서 값을 변경하면 멤버변수가 인스턴스에 끼치는 영향

20.02.19 20:15 작성 조회수 162

1

안녕하세요 교수님

[04 : 17] 에서

2개의 인스턴스가 있을 때

Something st1;

Something st2;

st1.s_value = 2; 를 해서 2를 넣었는데 

어째서 st2.s_value 값과 주소가 같아진건지 모르겠습니다.<o:p></o:p>

인스턴스 마다 값을 할당받는것 아닌가요?

혹시 static을 써서 Something이란 class 메모리에 정적으로 멤버변수가 박혀서 그런건가요?

Static을 쓴다면 아무리 많은 인스턴스들을 만들어도 s_value의 값은 정적인 값으로 되는 건가요?<o:p></o:p>

답변 3

·

답변을 작성해보세요.

6

code h님의 프로필

code h

2020.06.17

동적으로 인스턴스 생성 시 변수를 생성하는 것이 아니라,

static일 경우 정적으로 변수를 생성하게 해주는 기능을 하기 때문인 것 같습니다.

제가 이해한 대로 예를 들자면,

class 주민등록증 { 

    static string 발급국가;

    string 주민등록번호;

}

string 주민등록증 ::발급국가 = "대한민국";

이렇게 있을 때 주민등록증 인스턴스를 만들 때 마다 발급국가 멤버변수를 동적으로 생성하는 것이 아니라, 

발급국가를 static으로 정적변수화 시켜 하나의 변수로 다루겠다는 의미라고 생각합니다.

4

zbqmgldjfh님의 프로필

zbqmgldjfh

2021.01.02

질문자나 저처럼 이러한 의문이 드는 분들을 위해 남겨봅니다.

class안에서 static으로 선언된 member변수는 모든 object(instance)들이 공유합니다.

 static member variables are shared by all objects of the class. (출처 LearnCPP 11.13)

따라서 st1.s_value 2; 을 해주더라도 모든 object들의 변수값이 동일하게 2로 변경되는 것 입니다.

0

안녕하세요? 코드를 같이 올려주시면 좋을 것 같은데, 제가 볼 때는 static의 의미를 이해하기 시작하신 것 같습니다.