다음을 통해 공유


변환 함수 (C++)

이전 섹션에서 설명한 생성자가 변환에서 한 가지 형식의 개체를 특정 클래스 형식으로 암시적으로 변환할 수 있습니다.명시적 변환은 주어진된 클래스 형식에서 다른 형식으로 제공할 수 있는 방법을 설명 합니다.클래스 형식 변환 함수를 사용 하 여 자주 수행 됩니다.변환 함수는 다음 구문을 사용합니다.

문법

  • 변환 함수 이름:
    연산자 변환 형식 이름**()**

  • 변환 형식 이름:
    형식 지정자 목록 ptr 연산자선택

다음 예제에서는 형식 변환 하는 변환 함수 지정 Money 입력 합니다 double:

// spec1_conversion_functions1.cpp
struct Money {
   operator double() { return _amount; }

private:
    double _amount;
};

int main() {
   Money Account;
   double CashOnHand = Account;
}

초기화 하는 CashOnHand 와 Account 형식으로 변환 하면 됩니다 Account 입력 합니다 double.

변환 함수 (함께 생성자)는 캐스트를 사용 하면 호출 하는 함수 이므로 "캐스트 연산자" 라고도 합니다.캐스팅을 또는 명시적 변환은 다음 예제를 사용 하 여 형식의 개체의 현재 값을 인쇄 하려면 Money:

cout << (double)Account << endl;

변환 함수는 파생 된 클래스에서 상속 됩니다.변환 연산자는 정확 하 게 동일한 형식으로 변환 하는 기본 클래스 변환 연산자에만 숨깁니다.따라서, 사용자 정의 연산자 int 사용자 정의 함수가 표시 되지 짧은 연산자 함수에서 기본 클래스입니다.

하나의 사용자 정의 변환 함수가 암시적 변환을 수행 하는 경우에 적용 됩니다.명시적으로 정의 된 변환 함수가 있으면 컴파일러 중간 형식의 개체로 변환할 수 있습니다 찾지 않습니다.

변환 해야 하는 경우는 모호 하면 됩니다, 그리고 오류가 생성 됩니다.모호함에 사용자 정의 변환이 두 개 이상 사용할 수 있을 때 또는 사용자 정의 변환 및 기본 변환에 존재 하는 경우 발생 합니다.

예제

다음 예제에서는 모호한 클래스 선언을 보여 줍니다.

// spec1_conversion_functions2.cpp
#include <string.h>
#include <stdio.h>

struct String {
   // Define constructor that converts from type char *.
   String( char *szBuffer ) {
      strcpy_s( _text, szBuffer );
   }

   // Define conversion to type char *.
   operator char *() {
      return _text;
   }

   int operator==( const String &s )  {
      return !strcmp( _text, s._text );
   }

private:
   char _text[80];
};

int main() {
   String s( "abcd\0" );
   char *ch = "efgh";

   // Cause the compiler to select a conversion.
   return s == ch; // C2666
}

식에서 s == ch, 컴파일러에 대 한 두 가지 선택 하는 정확한 지를 확인 하는 방법은 없습니다.변환할 수 있습니다 ch 형식의 개체에 String 생성자를 사용 하 여 다음 사용자 정의 사용 하 여 비교를 수행 하 고 operator==.변환할 수 있는 s 형식의 포인터를 char * 변환을 사용 하 여 작동 한 후 포인터를 비교 합니다.

"더 다른, 컴파일러 수정" 비교 식의 의미를 확인할 수 없고 오류가 발생 항목이 기 때문입니다.

참고 항목

참조

변환