이번에는 묵시적 형변환 연산자 중복 정의를 알아봅시다.
C++언어에서 int 형식과 char 형식은 상호 묵시적 형 변환이 가능합니다. 이는 int 형식 변수에 char 형식을 대입하면 컴파일 내부에서 char 형식의 값을 int 형식의 값으로 묵시적 형 변환하여 대입하기 때문입니다.
int a = 3; char c = 'a'; c = a; //묵시적 형변환에 의해 a를 char 형식의 값으로 변환 후 대입 a = c; //묵시적 형변환에 의해 c를 int 형식의 값으로 변환 후 대입
C++언어에서는 개발자가 묵시적 형 변환 연산자를 중복 정의할 수 있습니다. 묵시적 형 변환 연산자를 중복 정의할 때는 operator 키워드 뒤에 형 변환할 형식 이름을 사용합니다. 그리고 리턴 형식은 개발자가 명시할 수 없습니다.
예를 들어 Score 클래스에 int 형식으로 묵시적 형 변환 연산자를 중복 정의하면 int 형식이 와야 하는 곳에 Score 형식을 사용할 수 있습니다. 이를 통해 ==, =>, >, <, <=, != 등의 다양한 연산자를 중복 정의해야 하는 것을 해결할 수 있습니다.
//Score.h #pragma once #include <iostream> using namespace std; class Score { int value; public: static const int max_score; static const int min_score; static const int not_score; Score(int value); operator int(); private: void SetValue(int value);//값 설정자 };
//Score.cpp #include "Score.h" const int Score::max_score=100; const int Score::min_score=0; const int Score::not_score=-1; Score::Score(int value) { SetValue(value); } Score::operator int() { return value; } void Score::SetValue(int value) { if((value<min_score)||(value>max_score)) { value = not_score; } this->value = value; }
//묵시적 형 변환 연산자 중복 정의 //Program.cpp #include "Score.h" int main() { Score score(20); int num=0; cout<<"정수 :"; cin>>num; if(num>score) { cout<<num<<"이 "<<score<<"보다 크다."<<endl; } else if(num == score) { cout<<num<<"과 "<<score<<"는 같다."<<endl; } else { cout<<num<<"이 "<<score<<"보다 작다."<<endl; } int value = score; cout<<"값:"<<value<<endl; return 0; }