c++에서 생성자가 다른 생성자를 호출하는 방법
글쓴이: reddragon / 작성시간: 수, 2004/03/24 - 11:50오후
눈팅만 하다가 드디어 첫글 올리게 되네요 ..;;
class A { A() { blah~ blah~ } A(String str) { this(); // blah~ blah~ part -_-;; blah2~ blah2~ } ... }
자바에서는 위와 같이, 생성자가 여러 종류 있을 때,
그 중, 생성자가 꼭 해야하는 일이 있으면, 클래스 내의 다른 생성자를
this() 를 통해서 부를 수 있는데요.
제목과 마찬가지로, c++에서는 위와 같은 것을 어떻게 할 수 있는지 궁금합니다.
this->~A();
처럼 디스트럭터를 직접 호출할 수는 있던데,
this->A(); 라고 해봤더니 뭐라 하네요. :(
Forums:
Re: c++에서 생성자가 다른 생성자를 호출하는 방법
C++에는 this()와 같은 용법은 없고요,
별도의 초기화 함수를 쓰면 간단하게 동일하게 구현할 수 있습니다.
그러나 대부분은 default parameter를 사용해서 하나의 생성자로 해결할 수 있는 경우가 많죠.
this->A(); <- 이렇게 하지 말고A();
this->A(); <- 이렇게 하지 말고
A();
라고 해보세요.
저 역시 우선 땜빵으로 cedar님의 말씀처럼 공통적으로 사용할 부분
저 역시 우선 땜빵으로 cedar님의 말씀처럼
공통적으로 사용할 부분을 멤버함수로 하여서 쓰고 있습니다. ^^;
또한 Testors님의 말씀을 보고, 이제서야 --;; 테스트를 해 보았습니다.
생성자 A(char *)와 생성자 A(char*, bool) 모두 내부적으로 A(); 로 하니깐 되더군요
(친구한테서 답변 들었던거 같은데 해보지도 않았네요 :oops: )
그런데, 저런 사용은 꼭 A(); 즉, 인자가 없는 생성자에 한해서만 되나요?
생성자 A(char*, bool) 에서 A(char *)를 호출하면
라고 에러가 나네요;
인자가 있는 생성자는 그럼 어찌 사용할 수 있나요? ;;
~(_ _)~ 헙~
_(ㅡ0ㅡ)_ 푸~
일단 아래 방법을 써보시지요..[code:1]class A&#
일단 아래 방법을 써보시지요..
이게 가능한 이유는 좀더 고민해보고 써보겠습니다.
저도 명확하게 이해를 못해서리.. 뒤적이는 중입니다. ^^;;
[quote="Testors"]this->A(); <- 이렇
이렇게는 제대로 동작하지 않습니다. 아래 코드를 한 번 돌려보세요. 다른 생성자를 직접 호출하는 것은 원하지 않는 동작을 보여줍니다.
이 코드가 의도한 출력 결과는
이지만, 의도한 대로 출력되지 않습니다.
Heejoon Lee
그냥 A() 는 해당 인스턴스에 대해서 생성자를 호출하는게 아니라
그냥 A() 는 해당 인스턴스에 대해서 생성자를 호출하는게 아니라
임시객체를 하나 만드는것일 뿐이군요.
(우선 this 가 다르고 소멸자가 두번 호출되는것으로 확인 가능)
아마 최적화하면 그마저 제거될테고.. >.<
역시 방법이 new 연산자를 이용하는것 밖에 없을듯 하네요.
아래와 new 연산자를 이용해 같이 메모리 할당 없이 생성자만 부를 수 있습니다.
그나저나 일반적인 호출이 왜 안되는지는 역시 연구중 ^^;
[code:1]new (this) TestClass(
g++ 2.95.4에서는 컴파일이 안되네요. ;;
Heejoon Lee
사족으로 operator () 도 있습니다;;[code:1]
사족으로 operator () 도 있습니다;;
_____________________________
언제나 맑고픈 샘이가...
http://purewell.biz
댓글 달기