언어 자료구조 알고리즘/Escort C++

[C++] 묵시적 형 변환 연산자 중복 정의

언제나휴일 2016. 4. 15. 15:11
반응형

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;

}

 

 앞에서 계속 얘기를 했듯이 묵시적 형 변환 연산자를 중복 정의를 할 경우에도 사용자는 개발자가 제공하는 형 변환 연산에 대해 충분히 인지할 수 있어야 할 것입니다. 묵시적 형 변환하는 값이 학생의 번호나 이름과 같이 사용하는 개발자로서도 충분히 인지할 수 있다면 효과적이겠지만 학생의 아이큐나 성적과 같은 값을 묵시적 형 변환의 값으로 반환한다면 오히려 사용함에 불편할 수 있을 것입니다.


7장 산자 의 Part1

7장 산자 의 Part2

(모든 동영상 강의는 무료입니다.)

반응형