7.2.3 묵시적 형 변환 연산자 중복 정의
C++언어에서 int 형식과 char 형식은 상호 묵시적 형 변환이 가능합니다. 이는 int 형식 변수에 char 형식의 값을 대입한다고 하더라도 컴파일 내부에서 묵시적으로 char 형식의 값을 int 형식의 값으로 묵시적 형 변환하여 대입하기 때문입니다. C++언어에서는 사용자 정의 형식에 대해서도 묵시적 형 변환 연산자를 중복 정의할 수 있게 문법을 제공하고 있습니다. 이 경우 형 변환하고자 하는 형식명을 묵시적 형 변환 연산자 중복 정의에 나타내는 연산 기호로 사용이 되며 리턴 형식은 형 변환하고자 하는 형식임이 자명하므로 개발자가 잘못된 리턴 형식을 기재할 수 없도록 하고 있습니다. 즉, 묵시적 형 변환 연산자를 중복 정의할 때 리턴 형식을 명시할 수 없습니다. 그리고 묵시적 형 변환 연산자는 단항 연산자이므로 클래스에 정의할 때에는 입력 매개 변수 리스트가 비게 되며 전역에서 정의할 때에는 사용자 정의 형식이 오게 됩니다. 다음은 Stu 형식과 int 형식 사이에 묵시적 형 변환 연산자를 중복 정의하는 예입니다.
Stu.h |
#pragma once #include <string> using namespace std; class Stu { const int num; string name; public: Stu(int _num,string _name); operator int(); }; |
Stu.cpp |
#include "Stu.h" Stu::Stu(int _num,string _name):num(_num) { name = _name; } Stu::operator int() { return num; }
|
묵시적 형 변환하고자 하는 형식명이 operator 키워드 뒤에 오는 것과 반환 형식을 명시하지 않지만 반환 구문이 있다는 것을 확인하시기 바랍니다.
다음은 묵시적 형 변환이 정상적으로 가동하는 것을 보여주기 위한 테스트 코드입니다.
Example.cpp |
#include "Stu.h" #include <iostream> void main() { Stu *stu = new Stu(3,"홍길동"); if((*stu) == 3) { cout<<"일치합니다."<<endl; } delete stu; } |
앞에서 계속 얘기를 했듯이 묵시적 형 변환 연산자를 중복 정의를 할 경우에도 사용자는 개발자가 제공하는 형 변환 연산에 대해 충분히 인지할 수 있어야 할 것입니다. 묵시적 형 변환하는 값이 학생의 번호나 이름과 같이 사용하는 개발자로서도 충분히 인지할 수 있다면 효과적이겠지만 학생의 아이큐나 성적과 같은 값을 묵시적 형 변환의 값으로 반환한다면 오히려 사용함에 불편할 수 있을 것입니다.
(모든 동영상 강의는 무료입니다.)
'언어 자료구조 알고리즘 > Escort C++' 카테고리의 다른 글
[C++] 8. 구조화 된 예외처리 (0) | 2016.04.15 |
---|---|
[C++] 함수 개체 실습의 Zone 클래스 구현 예제 코드 (0) | 2016.04.15 |
[C++] 함수 개체 (0) | 2016.04.15 |
[C++] 개체 출력자 (0) | 2016.04.15 |
[C++] 증감 연산자 중복 정의 (0) | 2016.04.15 |
[C++] 인덱스 연산자 중복 정의 (배열 클래스 정의) (0) | 2016.04.15 |
[C++] 대입 연산자 중복 정의 (0) | 2016.04.15 |
[C++] 클래스에 연산자 중복 정의 (0) | 2016.04.15 |
[C++] 전역 연산자 중복 정의 (0) | 2016.04.15 |
[C++] 연산자 중복 정의 (0) | 2016.04.15 |