C++환경에 대한 기초적인 질문입니다

해결됨
smstudy12 프로필

https://www.inflearn.com/course/following-c-plus/lecture/14743
해당 영상 2:50~3:00 구간에서 작성하는 코드에 대해 C++ 프로그래밍 환경과 관련한 기초적인 질문이 있습니다.

클래스 내부에서 선언된 private static 변수를 어떻게 외부(클래스 밖)에서 참조할 수 있는지 궁금합니다.

C#의 경우에서는 해당 코드와 동일하게 작성하여도 참조가 되지 않아 이것이 C++의 어떤 점과 관련이 있나 궁금합니다.

PP TREE 프로필
PP TREE 8달 전

안녕하세요? 질문을 보다 정확하게 하시기 위해 노력한 흔적이 보이네요.

인프런 강의는 연관 수업에서 질문을 하시면 영상 링크가 뜨기 때문에 별도로 링크를 적어주실 필요는 없습니다.

앞의 질문에서는 이해를 할 수 없었는데

Chapter8_11.cpp 파일의  Line 16 Something::s_value = 1024;

이 부분을 얘기하시는 것 같네요. 코드와 함께 질문을 하시면 더 확실합니다.

Private인데도 왜 file scope에서 접근이 가능하냐는 질문은 일차적으로는 문법이 그렇게 허용을 해주기 때문이고 역사를 되짚어 보면 예전 문법에서는 허용해주지 않으면 static member를 초기화할 수가 없었습니다. C언어 강의에서 storage class에 대해 공부를 하시면 조금 더 명확하게 이해를 하실 수가 있습니다. 아래 교재 링크도 참고하세요. 

https://www.learncpp.com/cpp-tutorial/811-static-member-variables/

Note that this static member definition is not subject to access controls: you can define and initialize the value even if it’s declared as private (or protected) in the class.

추가로 최근 C++ 문법에서 const static member는 클래스 선언에서 초기화할 수 있습니다.

https://stackoverflow.com/questions/185844/how-to-initialize-private-static-members-in-c

마지막으로 C#과 비교를 해보고 계신데 C#이 C++보다 후에 나온 언어이기 때문에 C#의 문법을 설계하는 단계에 C언어의 흔적을 지우는 과정에서 문법의 차이가 생긴 것으로 추정됩니다.

smstudy12 프로필
smstudy12 8달 전

아.. 보내주신 링크가 정말 큰 도움이 됐습니다! ㅠㅠㅠ

특히 LearnCpp 본문을 보고 궁금했던 점이 완전히 해소되었으며, C에서의 static variable의 개념도 더욱 확실하게 자리잡은 것 같습니다.

확실히 비교적 단순한 문법인 C#을 먼저 배우고 나서 C++을 배우려니 굉장히 당연시 여겨지는 문법 부분에 혼동이 생기는 점에 있어서 처음 독학할 때 상당히 힘든 점이 있었는데, 강좌를 들을수록 정말 구입하기를 백 번 잘했다는 생각이 듭니다... 코딩 경험이 많지 않은 편이라 만약 그러지 않았다면 어떻게 공부했을 지도 모르겠네요.

맞습니다. 질문을 하기에도 아는 것이 적어 제대로 된 질문을 드릴 수 없었는데, 이렇게까지 친절하게 답변해주시니 너무나도 감사합니다. :)

다시 한 번 답변 감사드리고, 좋은 하루 되시기 바랍니다!!

PP TREE 프로필
PP TREE 8달 전

도움이 되었다니 다행입니다. 나중에 인프런 수강평 부탁드려요.

지식공유자 되기
많은 사람들에게 배움의 기회를 주고,
경제적 보상을 받아보세요.
지식공유참여
기업 교육을 위한 인프런
“인프런 비즈니스” 를 통해 모든 팀원이 인프런의 강의들을
자유롭게 학습하는 환경을 제공하세요.
인프런 비즈니스