C++ Chapter 8.5 : 위임 생성자
카테고리: Cpp
태그: Cpp Programming
인프런에 있는 홍정모 교수님의 홍정모의 따라 하며 배우는 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); 호출
🌜 개인 공부 기록용 블로그입니다. 오류나 틀린 부분이 있을 경우
언제든지 댓글 혹은 메일로 지적해주시면 감사하겠습니다! 😄
댓글남기기