여기서 생성자 위임이 무엇인지 살펴보겠습니다. 생성자가 같은 클래스의 다른 생성자를 호출하면 생성자 위임이라고 합니다. 이 기능은 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