[ 685p ~ 693p ] 객체배열의 초기화, 클래스 사용 범위 상수, enum class
- 객체배열의 초기화
초기화하는 생성자는 당연히 다른걸 써도 된다
초기화를 하지 않는 인덱스는 디폴트생성자가 실행되겠다
- 클래스 사용 범위 상수
클래스 사용 범위 = 클래스 밖이 아닌 안에서 정의되는 이름에 적용
위의 코드에서 배열생성에 오류가 났다
이유는 a의 값을 알지 못해서인데
클래스선언은 클래스가 어떻게 생겼는지 서술하는것이지 객체가 생성되는건 아니다
= 객체가 생성되는게 아니니 값을 저장 할 기억 공간이 없다
= array 선언부에 a의 값은 모른다
그렇기에 클래스 선언부 내부에 상수를 사용하려면 두가지 방법이 있다
enum을 사용하는 방법
enum은 정의만으로 메모리할당이 되지 않으며
[ 그래서 객체에 데이터 멤버를 생성하지 않는다 ]
define처럼 치환되는 방식이므로
객체가 생성되지 않아도 사용이 가능하다
static을 사용하는 방법
클래스 선언부 내부에 static을 사용하면 전역메모리에 올라가며 같은 클래스의 객체가 공유하고 사용 가능한
정적 멤버 변수가 된다
[정적 멤버 변수는 뒤에 자세히 나온다]
마찬가지로 객체의 생성과는 상관이 없기에 가능한 부분이다
- enum class
C++11 에서 열거자에게 클래스 범위를 갖게하는 새로운 열거자 형식을 제공하였다
열거자가 클래스 범위를 가지고 있기 때문에 저렇게 다른 enum정의의 식별자와 이름이 충돌할 가능성을 없앴다
단 그렇기 때문에 기존에 그냥 사용했던것과 다르게 구별할 문법이 필요한데 enumName::을 사용하면 된다
위에서 (int)로 형변환을 해준 이유는 enumClass에서 변수형 관리가 강화되었기 때문이다
기존enum처럼 일부상황에서 자동으로int형으로 암시적 전환이 이루어지지 않는다