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 |