C++/Class
2021. 3. 12. 17:51
생성자 (Constructor)
인스턴스가 처음 생성될 때 호출되는 함수
멤버 변수부터 생성하고 그 다음 호출된다.
- 멤버 중에 클래스가 있을 경우 해당 클래스의 생성자부터 호출된다.
#include <iostream> class Second { public: Second() { std::cout << "Second constructor\n"; } }; class First { Second sec; public: First() { std::cout << "First constructor\n"; } }; int main() { First test; } /* stdout Second constructor First constructor */
생성자를 하나도 만들지 않으면 기본으로 다음과 같은 형태가 만들어진다.
아무 것도 안하는 생성자
MyClass::MyClass() {}
복사 생성자(Copy Constructor)
MyClass::MyClass(const MyClass& instance_in) { // 내부 값을 모두 복사하는 코드 }
생성자의 파라미터에 기본값을 넣을 수 있다.
Uniform initialization과 Copy initialization의 차이
- 형변환이 안된다. (1장 참고)
기법
- 생성자를
private
으로 일부러 설정하는 기법도 존재한다.
- 생성자를
주의사항
- 생성자의 인자가 하나도 없을 경우에만 소괄호를 생략한다.
- 기본값 설정으로 인자를 넣지 않아도 될 경우에도 마찬가지이다.
#include <iostream> class Fraction { int numerator_; int denominator_; public: Fraction(const int& num = 1, const int& den = 3) { numerator_ = num; denominator_ = den; } void print() { std::cout << numerator_ << '/' << denominator_; } }; int main() { Fraction frac; // frac()으로 하면 안됨 frac.print(); } /* stdout stderr 1/3 */
- 생성자의 인자가 하나도 없을 경우에만 소괄호를 생략한다.
멤버 초기화 리스트 (Member Initializer Lists)
위임 생성자(Delegating Constructor)
복사 생성자(Copy Constructor)
변환 생성자(Converting Constructor)
참고
'C++ > Class' 카테고리의 다른 글
C++ 복사 생성자(Copy Constructor) (0) | 2021.03.12 |
---|---|
C++ 위임 생성자 (Delegating Constructor) (0) | 2021.03.12 |
C++ 멤버 초기화 리스트 (Member Initializer Lists) (0) | 2021.03.12 |
C++ 접근 지정자 (Access Specifier) (0) | 2021.03.12 |
C++ Class (0) | 2021.03.12 |