728x90
반응형
질문 : C ++에서 다른 생성자 (생성자 체인)에서 생성자를 호출 할 수 있습니까?
C # 개발자로서 저는 생성자를 통해 실행하는 데 익숙합니다.
class Test {
public Test() {
DoSomething();
}
public Test(int count) : this() {
DoSomethingWithCount(count);
}
public Test(int count, string name) : this(count) {
DoSomethingWithName(name);
}
}
C ++에서이 작업을 수행하는 방법이 있습니까?
클래스 이름을 호출하고 'this'키워드를 사용해 보았지만 둘 다 실패했습니다.
답변
C ++ 11 : 예!
C ++ 11 이상에는 이와 동일한 기능 ( 위임 생성자 라고 함)이 있습니다.
구문은 C #과 약간 다릅니다.
class Foo {
public:
Foo(char x, int y) {}
Foo(int y) : Foo('a', y) {}
};
C ++ 03 : 아니요
불행히도 C ++ 03에서는이 작업을 수행 할 수있는 방법이 없지만이를 시뮬레이션하는 방법에는 두 가지가 있습니다.
- 기본 매개 변수를 통해 두 개 이상의 생성자를 결합 할 수 있습니다.
class Foo { public: Foo(char x, int y=0); // combines two constructors (char) and (char, int) // ... };
- init 메소드를 사용하여 공통 코드를 공유하십시오.
class Foo { public: Foo(char x); Foo(char x, int y); // ... private: void init(char x, int y); }; Foo::Foo(char x) { init(x, int(x) + 7); // ... } Foo::Foo(char x, int y) { init(x, y); // ... } void Foo::init(char x, int y) { // ... }
참조를 위해 C ++ FAQ 항목 을 참조하십시오.
출처 : https://stackoverflow.com/questions/308276/can-i-call-a-constructor-from-another-constructor-do-constructor-chaining-in-c
728x90
반응형
'프로그래밍 언어 > C++' 카테고리의 다른 글
C ++에서 가상 기본 클래스 란? (0) | 2021.07.07 |
---|---|
C #에서 돈의 단위로 사용하기에 가장 좋은 데이터 유형 (0) | 2021.07.07 |
이 프로그램이 세 개의 C ++ 컴파일러에서 잘못 거부 된 이유 (0) | 2021.07.07 |
32 비트 루프 카운터를 64 비트로 대체하면 Intel CPU에서 _mm_popcnt_u64의 성능 편차가 발생합니다. (0) | 2021.07.06 |
POSIX를 사용하여 C ++에서 명령을 실행하고 명령의 출력을 얻는 방법 (0) | 2021.07.06 |