글
[C++] 다양한 생성자 초기화 방법
Programming/C++ Language
2010. 3. 19. 14:36
디폴트 인수를 사용하는 생성자
인자가 없는 디폴트 생성자를 호출 하더라도, 일괄된 값으로 초기화되는 것을 보장해 준다.
위와 같은 경우에는 t1은 모든 인수가 default 값으로 초기화가 된다. t2는 hr 이 2가 되고, min, sec 는 default 로 사용되고, t3는 sec 만 default 로 사용을 하게 된다. t4 는 모든 값이 지정된 값으로 초기화를 하게 된다.( 여기서 주의할 점은, SetTimer 가 없어도 기본값으로 초기화 되는 것이 아니라, 생성자의 인자에 값이 없더라도 인자값을 초기값으로 넣어주는 것이다. )
아래는 생성자를 또 다른 방법으로 사용할 수 있는 예로, 상수를 초기화 할 때 주로 사용을 한다.
인자로 넘어온 c, i 값을 이용하여, 비상수 멤버와 상수 멤버를 초기화하는 것이다. count( c ), increment( i ) 는 선언과 동시에 초기화가 되는 것으로 Time 생성자 본체가 시작되기 전에 수행이 되게 된다.( 부모 class 가 있는 경우, 부모 class 의 생성자가 호출 되기 전에 값이 초기화 된다. 값 초기화 > 부모 class 생성자 호출 > 자신 생성자 호출 ) 상수인 increment 는 Time 본체 안에서는 초기화 될 수 없고, 위와 같은 방법으로 초기화 될 수 있다.
class Time{
Time::Time( int hr, int min, int sec )
{
Time( int = 0, int = 0, int = 0 );
}
Time::Time( int hr, int min, int sec )
{
SetTimer( hr, min, sec );
}
인자가 없는 디폴트 생성자를 호출 하더라도, 일괄된 값으로 초기화되는 것을 보장해 준다.
1. Time t1;
2. Time t2( 2 );
3. Time t3( 21, 34 );
4. Time t4( 12, 25, 42 );
2. Time t2( 2 );
3. Time t3( 21, 34 );
4. Time t4( 12, 25, 42 );
위와 같은 경우에는 t1은 모든 인수가 default 값으로 초기화가 된다. t2는 hr 이 2가 되고, min, sec 는 default 로 사용되고, t3는 sec 만 default 로 사용을 하게 된다. t4 는 모든 값이 지정된 값으로 초기화를 하게 된다.( 여기서 주의할 점은, SetTimer 가 없어도 기본값으로 초기화 되는 것이 아니라, 생성자의 인자에 값이 없더라도 인자값을 초기값으로 넣어주는 것이다. )
아래는 생성자를 또 다른 방법으로 사용할 수 있는 예로, 상수를 초기화 할 때 주로 사용을 한다.
class TIme
{
{
private:
int count;
const int increment;
const int increment;
}
Time::Time( int c, int i ) : count( c ), increment( i )
{
Time::Time( int c, int i ) : count( c ), increment( i )
{
// Empty body
}
인자로 넘어온 c, i 값을 이용하여, 비상수 멤버와 상수 멤버를 초기화하는 것이다. count( c ), increment( i ) 는 선언과 동시에 초기화가 되는 것으로 Time 생성자 본체가 시작되기 전에 수행이 되게 된다.( 부모 class 가 있는 경우, 부모 class 의 생성자가 호출 되기 전에 값이 초기화 된다. 값 초기화 > 부모 class 생성자 호출 > 자신 생성자 호출 ) 상수인 increment 는 Time 본체 안에서는 초기화 될 수 없고, 위와 같은 방법으로 초기화 될 수 있다.
'Programming > C++ Language' 카테고리의 다른 글
[C++] static_cast (0) | 2010.03.22 |
---|---|
[C++] const (0) | 2010.03.19 |
static 클래스 멤버 (0) | 2010.03.19 |
namespace (0) | 2010.03.19 |
연산자 오버로딩 (0) | 2009.09.30 |