본문 바로가기
프로그래밍/언어_스크립트

C++의 멤버 초기화 리스트

by 써드아이 2010. 9. 27.
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