c++ 생성자 관련 질문입니다.
글쓴이: cococo / 작성시간: 토, 2008/09/13 - 8:49오전
음.. 딱히 검색어를 찾기 힘들어서( 실은 귀찮아서일지도. ㅡ,.ㅡ ) 그냥 질문 올려봅니다.
일단 코드를...
class foo{
int a;
int b;
foo();
foo( int input );
~foo();
}
foo::foo()
{ int a = 0;
int b = 0;
}
foo::foo( int input )
{
foo(); /* 요거 안되는 건가요?*/
a = input;
}
Pseudocode입니다만 보시면 아시리라 생각합니다.
foo( int ) 안에서 foo( void ) 를 실행하려 하니 안되네요? 컴파일에서 에러나는게 아니구요, 실제로 실행하니 b값이 안 바뀌어 있더라구요.
질문은요.
1. 개념적으로 foo()가 실행되는게 맞고, 단순히 어딘가 제가 코드를 잘못 만들었다.
2. 문법적으로 foo()는 foo( int ) 안에서 실행되지 않는다.
중 어느것이 맞는지 모르겠습니다.
아시는분... 가르쳐주시면... 나중에 밥 살께요. 흑. T_T;
Forums:
인용:1. 개념적으로
위의 코드로는 디폴트 생성자를 호출할 수 없습니다. 그러나
명시적으로 호출해 주는 방법은 있습니다.
foo::foo(), 또는 this->foo() 를 이용하면 호출은 할 수 있습니다.
그러나 위의 방법대로 디폴트 생성자를 호출한다고 해도, 원하는 목적인
멤버변수의 초기화는 할 수 없습니다. foo::foo(), this->foo()의
호출은 단순히 임시객체를 생성하고 초기화를 할 뿐이며, 이 임시객체는
foo::foo(int input)를 이용해 생성될 객체와는 아무 상관이 없습니다.
즉 int a, int b는 초기화가 안 된 값을 유지합니다.
답변 감사드립니다.
답변 감사드립니다. 덕분에 하나 배웠습니다.
그런데요, 답변 읽다가 다시 궁금한게 생겼는데요. -_-;
[ foo::foo(), this->foo()의
호출은 단순히 임시객체를 생성하고 초기화를 할 뿐이며 ]
에서요, foo::foo() 가 임시객체를 생성하는 건 상상이 가는데요,
this->foo() 도 임시객체를 생성하나요?
this에서의 foo()이니까... 임시객체가 아닌 자기자신이 되어야 하는게 아닌가..하는 생각이 들어서요.
일단 결과를 보면 임시로 생성된다는 게 증명된거긴 하지만, [왜] this임에도 임시객체인지..가 잘 모르겠네요.
혹시 아신다면... 밥 두끼... -_-;;;;
행복은 희생없이는 얻을 수 없는 것인가?
시대는 불행없이는 넘을 수 없는 것인가?
댓글 달기