여기서 생성자 위임이 무엇인지 살펴보겠습니다. 생성자가 같은 클래스의 다른 생성자를 호출하면 생성자 위임이라고 합니다. 이 기능은 C++11부터 제공됩니다.
다음 프로그램을 보고 이 코드의 문제점을 분석해보자.
예시
#include <iostream>
using namespace std;
class MyClass {
int a, b, c;
public:
MyClass(){
a = b = c = 0;
}
MyClass(int c) {
// Initializing a and b are redundent, only c initialization is needed here
a = 0;
b = 0;
this->c = c;
}
void display(){
cout << "a : " << a << ", b : " << b << ", c : " << c;
}
};
main() {
MyClass my_obj(5);
my_obj.display();
} 출력
a : 0, b : 0, c : 5
여기에서 코드가 제대로 작동하고 있지만 일부 중복 코드가 있음을 알 수 있습니다. 매개변수화되지 않은 생성자는 및 b의 값을 1로 설정할 수 있습니다. 따라서 첫 번째 생성자를 두 번째 생성자에 사용하면 더 효과적입니다. 이러한 이유로 생성자 위임이라는 방법을 사용해야 합니다.
예시
#include <iostream>
using namespace std;
class MyClass {
int a, b, c;
public:
MyClass(){
a = b = c = 0;
}
MyClass(int c) : MyClass(){ //using constructor delegation
this->c = c;
}
void display(){
cout << "a : " << a << ", b : " << b << ", c : " << c;
}
};
main() {
MyClass my_obj(5);
my_obj.display();
} 출력
a : 0, b : 0, c : 5