1. 아래 리스트의 마지막 클래스를 보면 멤버 초기화 리스트를 사용했는데
base( a, b )의 경우 base 클래스로부터 상속 받은 멤버의 초기화
m_other( a, b )의 경우 other 클래스의 인스턴스인 m_other 변수를 초기화 한 것이다.
m_other의 초기화가 정말로 저런식으로 가능할까???
class base { base( int a, int b ); ~base() {} int m_a; int m_b; } base::base( int a, int b ) : m_a(a), m_b(b) { }
class other { other( int a, int b ) ~other() {} int m_a; int m_b; } other::other( int a, int b ) : m_a(a), m_b(b) { }
class derived : public base { derived( int a, int b, int test); ~derived() {} int m_test; other m_other; } derived::derived( int a, int b, int test ) : base( a, b ), m_test(test), m_other( a, b ) { }
derived 클래스의 생성자의 초기화 리스트에서 m_other를 빼버리면
other 클래스의 디폴트 생성자가 호출될 텐데 위 코드에서는 정의 되어있지 않기 때문에
에러가 발생한다.
2. 멤버 변수의 초기화를 사용할 수 밖에 없는 경우
- 클래스에 포함된 멤버 상수의 초기화
- 레퍼런스 멤버 변수의 초기화
위 두가지 경우는 초기화 리스트 말고는 방법이 없지롱~
'프로그래밍 > 언어_스크립트' 카테고리의 다른 글
C++ class skeleton (0) | 2010.10.20 |
---|---|
LOWORD() / HIWORD() (0) | 2010.10.14 |
C++ 에서 구조체 (0) | 2010.09.27 |
C++ 에서 레퍼런스 (0) | 2010.09.27 |
typedef - 사용자 정의형, 함수 포인터 (0) | 2008.02.19 |