이 문서는 기계 번역을 이용하여 번역되었습니다. 문서를 영문으로 보려면 영문 확인란을 선택하세요. 마우스 포인터를 텍스트 위로 이동시켜 팝업 창에서 영문 텍스트를 표시할 수도 있습니다.
번역
영문
Visual Studio 2017을 사용하는 것이 좋습니다.

변환 생성자의 단점

컴파일러가 변환 생성자를 암시적으로 선택할 수 있으므로 사용자는 어떤 함수가 언제 호출되는지를 제어할 수 없게 됩니다. 이를 완전히 제어해야 할 경우에는 단일 인수를 사용하는 생성자를 선언하는 대신 다음 예제와 같이 "도우미" 함수를 정의하여 변환을 수행하십시오.

// spec1_drawbacks_of_conversion_constructors.cpp
// compile with: /EHsc
#include <stdio.h>
#include <stdlib.h>

// Declare Money class.
class Money {
public:
   Money();

   // Define conversion functions that can only be called explicitly.
   static Money Convert( char * ch ) { return Money( ch ); }
   static Money Convert( double d )    { return Money( d ); };
   void  Print() { printf_s( "%f\n", _amount ); }

private:
   Money( char *ch ) { _amount = atof( ch ); }
   Money( double d ) { _amount = d; }
   double _amount;
};

int main() {
   // Perform a conversion from type char * to type Money.
   Money Acct = Money::Convert( "57.29" );
   Acct.Print();

   // Perform a conversion from type double to type Money.
   Acct = Money::Convert( 33.29 );
   Acct.Print();
}
57.290000
33.290000

위의 코드에서 변환 생성자는 private이며 형식 변환에 사용할 수 없지만 Convert 함수를 호출하여 명시적으로 호출할 수 있습니다. Convert 함수는 정적이기 때문에 특정 개체를 참조하지 않고 액세스할 수 있습니다.

표시: