C++/Class
2021. 3. 12. 17:56
위임 생성자 (Delegating Constructor)
-
C++11
-
생성자에서 직접 생성하지 않고, 이미 구현된 생성자를 호출해서 대신 생성하도록 하는 것이다.
기본 예제
-
다음 예제에서는
st2
를 생성할 때id_
,name_
멤버 변수를 초기화 리스트로 초기화하고있다.#include <iostream> using namespace std; class Student { int id_; string name_; public: Student(const string& name_in) : id_{0}, name_{name_in} { print(); } Student(const int& id_in, const string& name_in) : id_{id_in}, name_{name_in} { print(); } void print() { cout << id_ << ' ' << name_ << '\n'; } }; int main() { Student st1(0, "jack jack"); Student st2("Dash"); }
-
같은 기능을 하는 코드가 여러 군데에 있으면 좋지 않으므로 다음과 같이 변경하는게 좋다.
#include <iostream> using namespace std; class Student { int id_; string name_; public: Student(const string& name_in) : Student(0, name_in) {} Student(const int& id_in, const string& name_in) : id_{id_in}, name_{name_in} { print(); } void print() { cout << id_ << ' ' << name_ << '\n'; } }; int main() { Student st1(0, "jack jack"); Student st2("Dash"); }
-
C++11 이전에서는 다음과 같이 초기화 함수로 작성하는게 일반적이었다고 하는데, 나는 이 방법이 더 좋은 것 같다.
#include <iostream> using namespace std; class Student { int id_; string name_; public: Student(const string& name_in) { init(0, name_in); } Student(const int& id_in, const string& name_in) { init(id_in, name_in); } void init(const int& id_in, const string& name_in) { id_ = id_in; name_ = name_in; print(); } void print() { cout << id_ << ' ' << name_ << '\n'; } }; int main() { Student st1(0, "jack jack"); Student st2("Dash"); }
'C++ > Class' 카테고리의 다른 글
C++ 변환 생성자(Converting Constructor) (0) | 2021.03.15 |
---|---|
C++ 복사 생성자(Copy Constructor) (0) | 2021.03.12 |
C++ 멤버 초기화 리스트 (Member Initializer Lists) (0) | 2021.03.12 |
C++ 생성자 (Constructor) (0) | 2021.03.12 |
C++ 접근 지정자 (Access Specifier) (0) | 2021.03.12 |