프로그래밍 언어/C++

C++ 위임 생성자 (delegating constructor)

ShovelingLife 2022. 8. 5. 20:07

위임 생성자는 특정 생성자를 호출하기 전 다른 생성자를 먼저 호출하는 것이다. 상속 받을 때처럼 : 기호를 써야한다.

  • member-initializer-list(멤버 초기화 리스트)를 가질 수가 없다. 즉 아래에 mX(X), mY(Y) 에서 다른 생성자 호출이 불가능하다.
  • Parent(int X) : Parent() 여기서는 Parent가 먼저 호출되고 int형 파라미터 들어간 생성자가 호출 된다.
  • 자식 클래스에서 또한 부모 클래스의 생성자를 쓸 수가 있다, 부모 생성자에선 자식 생성자를 대리로 호출하는건 불가능하다. 마찬가지로 부모 클래스의 생성자가 호출 되고 자식 클래스의 생성자가 호출된다.
#include <iostream>
#include <algorithm>

using namespace std;

class Parent
{
    int mX = 0, mY = 0;

public:
    Parent()
    {
        cout << "부모 클래스 기본 생성자" << endl;
    }

    // 파라미터 1개 위임 생성자
    Parent(int X) : Parent()
    {
        cout << "부모 클래스 기본 생성자 파라미터 1개" << endl;
    }

    // 파라미터 2개 초기화 리스트
    Parent(int X, int Y) : mX(X),mY(Y)
    {
        cout << "부모 클래스 기본 생성자 파라미터 2개" << endl;
    }

};

class Child : public Parent
{
public:
    Child() : Parent()
    {
        cout << "자식 클래스 기본 생성자" << endl;
    }
};

int main()
{
    Parent parent(5, 6);
    cout << endl;
    Child child;
}