C++ Chapter 8.5 : 위임 생성자

Date:     Updated:

카테고리:

태그:

인프런에 있는 홍정모 교수님의 홍정모의 따라 하며 배우는 C++ 강의를 듣고 정리한 필기입니다. 😀
🌜 [홍정모의 따라 하며 배우는 C++]강의 들으러 가기!


chapter 8. 객체 지향의 기초 : 위임 생성자

🔔 위임 생성자란

같은 클래스 내에서 생성자가 다른 생성자를 호출해 하는것

특정 멤버만 다양한 값으로 초기화 하고 싶을 때 사용

class Student
{
private:
    int m_id;
    string m_name;

public:
    Student(const string& name_in)
        : Student(0, name_in)   // 위임 생성자 ✨
    {}

    Student(const int & id_in, const string& name_in)
        : m_id(id_in), m_name(name_in)
    {}
};
  • 매개변수 1개인 Student(const string& name_in) 생성자에서, 매개변수 2개인 Student(const int & id_in, const string& name_in) 생성자를 호출하고 있다.
    • 이에 따라 m_id 멤버는 0으로 초기화 하고 name_in 멤버는 매개변수로 들어온 값으로 초기화 한다.
  • 이제 객체 생성시, 생성자에 인수 하나만 넘기면 m_name 멤버 값으로 초기화 되며 이 때 m_id 는 그냥 기본적으로 0으로 초기화 된다.
    • 사실은 Student(0, name_in) 을 호출하는 것이나 마찬가지
  • 첫번째 생성자는 이름만 초기화하는 것이 되고 두번째 생성자는 이름과 id를 모두 초기화 하는 생성자가 된다.
Student(const string& name_in)
    : m_id(0), m_name(name_in)   
    {}

이렇게 위와 같이 하기보단 다른 생성자를 가져다 쓰자.


🔔 init 멤버 함수

모든 멤버들을 싹 다 초기화 해주는 멤버 함수를 만들고 생성자마다 이를 각각 다르게 호출하는 방법도 있다. 교수님은 이 방법을 추천하셨다.

class Student
{
private:
    int m_id;
    string m_name;

public:
    Student(const string& name_in)  
        // : Student(0, name_in)
    {
        init(0, name_in);  
    }

    Student(const int & id_in, const string& name_in)
        // : m_id(id_in), m_name(name_in)
    {
        init(id_in, name_in);
    }

    void init((const int & id_in, const string& name_in))
    {
        m_id = id_in;
        m_name = name_in;
    }
};
  • void init((const int & id_in, const string& name_in))
    • Stdent의 모든 멤버들을 초기화 해주는 멤버함수를 만들었다.
  • 각각의 생성자 안에서 init 함수를 인수를 다르게 하여 호출하면 된다.
  • 매개변수 1개 생성자 호출시
    • init(0, name_in); 호출
  • 매개변수 2개 생성자 호출시
    • init(id_in, name_in); 호출


🌜 개인 공부 기록용 블로그입니다. 오류나 틀린 부분이 있을 경우 
언제든지 댓글 혹은 메일로 지적해주시면 감사하겠습니다! 😄

맨 위로 이동하기


Cpp 카테고리 내 다른 글 보러가기

댓글 남기기