Computer >> 컴퓨터 >  >> 프로그램 작성 >> C++

C++의 생성자 위임

<시간/>

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