C++/Class 2021. 3. 15. 23:32

변환 생성자(Converting Constructor)

  • explicit 키워드가 없는 생성자는 묵시적으로 형변환을 허용한다.

  • 변환이 가능한 경우는 해당 인자를 생성자에 인자로 주었을 때 유효한 경우이다.

    #include <iostream>
    #include <cassert>
    
    class Fraction
    {
      int    numerator_;
      int    denominator_;
    
    public:
      Fraction(int num = 0, int den = 1)
        : numerator_(num), denominator_(den)
      {
        std::cout << "Default constructor" << std::endl;
        assert(den != 0);
      }
    
      Fraction(const Fraction& fraction)
        : numerator_(fraction.numerator_), denominator_(fraction.denominator_)
      {
        std::cout << "Copy constructor called" << std::endl;
      }
    
      friend std::ostream& operator << (std::ostream& out, const Fraction& f)
      {
        out << f.numerator_ << " / " << f.denominator_;
        return (out);
      }
    };
    
    void    doSomething(Fraction frac)
    {
      std::cout << frac << std::endl;
    }
    
    int        main()
    {
      using namespace std;
    
      doSomething(7);
    }
    
    /* stdout
    Default constructor
    7 / 1
    */
    • 위의 기본 생성자 앞에 explicit 키워드를 붙이면, 묵시적 형변환을 금지시키는 것이 되어 에러가 출력된다.

      error C2664: 'void doSomething(Fraction)': cannot convert argument 1 from 'int' to 'Fraction'

'C++ > Class' 카테고리의 다른 글

C++ this  (0) 2021.03.15
C++ 소멸자 (Destructor)  (0) 2021.03.15
C++ 복사 생성자(Copy Constructor)  (0) 2021.03.12
C++ 위임 생성자 (Delegating Constructor)  (0) 2021.03.12
C++ 멤버 초기화 리스트 (Member Initializer Lists)  (0) 2021.03.12