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)


참고