안됩니다.
보통 Init() 같은 함수를 만들어서 생성자에서 이 함수를 공통으로 불러주긴합니다.
c++차기버전에는 위임생성자가 만들어진다고 하는데.. 먼나라일이라..
2010.03.05 20:31:54 (*.139.217.56)
키뤼
생성자가 다른 생성자를 부른다라는 것이 정확하게 뭘 말씀하시는건지는 모르겠지만
1. 클래스 내의 오버로딩 한 다른 생성자를 부른다.
2. 다른 클래스의 생성자를 부른다.
정도가 되겠네요.
결론부터 말씀드리자면 됩니다.
위에 분이 안된다고 말씀하셨는데 어째서 안된다고 하신지는 모르겠네요.
하다못해 생성자가 자기 자신을 다시 부르는것도 가능은 합니다. 컴파일도 되고요. (의미는 없지만요)
2번 같은 경우라면 쓰는 경우가 있겠지만, 1번의 경우라면 그렇게 안쓰시길 권합니다.
※ 2010-03-05 20:32:54 에 "키뤼(kyruie)" 에 의해 수정됨
2010.03.05 21:38:21 (*.45.14.10)
unace
// 키뤼
전 이런 의미로 받아들여서 안된다고 했습니다.
class Test
{
public:
Test()
: Test( 0 )
{
}
Test( int i )
: m_value( i )
{
}
private:
int m_value;
};
그런데 키뤼님은 아래와 같은 것을 말씀하신 건가보군요.
class Test
{
public:
Test()
{
Test( 0 ); // 임시 변수, this->m_value가 0이 되는 것이 아님
}
Test( int i )
: m_value( i )
{
}
private:
int m_value;
};
위와 같은 문맥으로 질문하신거라면 된다고 할 수 있겠네요 :)
질문자님 참고하세요~
2010.03.06 09:51:02 (*.139.217.56)
키뤼
unace// ':' 뒤에 적는것과 같은 형태( ex. Derieved() : Base(){} )는 호출이 아니라 초기화라고 하죠. 둘은 비슷하게 보일진 몰라도 엄연히 다릅니다.
2010.03.06 15:36:19 (*.129.96.15)
Tail
초기화나 생성자 호출이나 말만 좀 다르지 결국 의미하는건 똑같은데, 그거 가지고 자기 생성자 호출이 가능하다고 이야기하시면 초보에게 혼동을 줄 여지가 있습니다. 문맥을 보아하니 자기 생성자를 호출하는 경우를 물으시는 것 같은데, 임시 객체 생성을 통한 호출은 자기 생성자 호출이라고 보기는 무리가 있겠죠.
사실 그럼에도 불구하고 호출 자체는 가능합니다. new 연산자의 사용법 중 하나로 메모리 할당 대신 지정한 포인터을 this 인자로 넘겨 생성자만 부르는 방법이 있는데, 이걸 이용하면 다른 생성자를 부를 수는 있습니다. 허나 사람들이 이걸 안 쓰는 이유가 다 있기 때문에 지금은 그냥 안 된다고 생각해두시는게 좋을 것 같네요. 차기 표준에서는 위임 생성자를 이용해서 해결할 수 있고요...
2010.03.06 17:55:48 (*.251.68.253)
同床異夢
질문 자체가 답을 얻기 힘든 질문이네요.
질문은 할때는 가급적 소스 코드를 올리거나 (물론 함축해서 필요한 부분만 올리면 됩니다.)
자신이 원하고자 하는 부분을 표현할 수 있는 예를 들거나 해야하는데, 그런 부분이 전혀없어 답을 얻기가 힘들겠네요.
오버플로우에 종종 질문글을 올리곤 하는데 질문만 달랑 올리면 바로 올라오는 덧글이.. 소스를 보여줘..라는 글이 태반이더군요 ㅠㅠ 혹은 충고의 한마디와 함께 질문글의 점수를 -로 깍아 버립니다.
보통 Init() 같은 함수를 만들어서 생성자에서 이 함수를 공통으로 불러주긴합니다.
c++차기버전에는 위임생성자가 만들어진다고 하는데.. 먼나라일이라..