해결된 질문
작성
·
453
0
제목 그대로 궁금한데요. Something::_init이 Something 클래스 안에있는 init클래스까지는 이해가 됩니다. 그런데 왜 _init 옆에 또 Something을 써줘야하나요??
답변 1
0
Something::_init Something::s_initializer;
위 코드에서 볼드체 한 부분에 대한 문의로 보이는데,
s_initializer로 초기화할 적에 특정 클래스를 지정해야 하기 때문입니다.
인스턴스를 생성하는 방법에 대해 다시 복습해보시면 도움을 받을 수 있을 것입니다.
그렇다면 클래스 외부에서 int Something::s_value;
를 int형을 반환하는 Something클래스의 s_value를 정의한 것과 마찬가지로
Something::_init Something::s_initializer;
도 Something 클래스에 있는 _init 자료형을 반환하는 Something의 s_initializer를 정의한 부분(s_initializer가 Something의 private부분이므로)이라고 이해한게 맞나요??
코드 맥락의 이해를 돕기위해 강의 전반의 소스코드를 불러왔습니다.
#include <iostream>
using namespace std;
class Something
{
public:
class _init {
public:
_init()
{
s_value = 9875;//static변수는 공유가능
}
};
private:
static int s_value;
int m_value;
static _init s_initializer;//Something의 nested class는 private으로 선언
public:
Something():m_value(123){}
static int& getValue()
{
return s_value;
}
};
int Something::s_value; // static variable 선언과 정의 분리
Something::_init Something::s_initializer;
//Something 클래스에 있는 _init 자료형의 Something클래스의 s_initializer;
int main()
{
cout << Something::getValue() << endl;
return 0;
}
네 중첩 클래스에서 클래스네임으로 범위 결정 연산자를 교수님께서 사용하지 않아서 잘 몰랐는데 인스턴스 부분 다시한번 복습해서 이해해보겠습니다!