언어 자료구조 알고리즘/디딤돌 C++

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

언제나휴일 2016. 4. 25. 01:24
반응형


묵시적 형 변환 연산자 중복 정의


이번에는 묵시적 형변환 연산자 중복 정의를 알아봅시다.

 

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 형식을 사용할 수 있습니다. 이를 통해 ==, =>, >, <, <=, != 등의 다양한 연산자를 중복 정의해야 하는 것을 해결할 수 있습니다.


51. 묵시적 형 변환 중복 정의.zip


//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;

}

반응형