C++ 형변환 연산자 오버로딩

C++ 형변환 연산자 오버로딩

작성일 2018.05.09댓글 1건
    게시물 수정 , 삭제는 로그인 필요

class opt_test {
private:
int x;
int y;

public:
opt_test();
opt_test(int _x, int _y);
opt_test(const opt_test& _opt);
~opt_test();

inline int GetX() { return x; }
inline int GetY() { return y; }

public: // Operator
operator int();
operator float();
operator double();
};

다음과 같이 

operator int();
operator float();
operator double();

이 형변환 연산자를 정의하려고 합니다.

다른 연산자 오버로딩은 어떻게 끝냈는데, 형변환 연산자 오버로딩을 공부하다가
책에서 단순히 멤버변수가 한가지일 경우의 예제밖에 안나와 있어서 질문드립니다.

그냥 한가지 멤버변수가 있을때는 한가지 멤버변수만 return하면 되지만
두가지일 경우에는 어떻게 하나요?
반환은 하나만 되는거 아닌가요?

저렇게 x,y 가 두가지일 경우에는 어떤식으로 정의를 해야하는지 궁금합니다.


#c++ vector #c++ string #c++ map #c++ sort #c++ 연산자 #c++ set #c++ 배열 #c++ int to string #c++ 포인터 #c++ queue

profile_image 익명 작성일 -

int 형으로 반환한다면 return x + y; 를 하든

return 2 * x + 3 * y; 를 하든 return x; 또는 return y; 를 하든

int 하나가 반환됩니다.


형변환 연산자는 멤버함수이고 c 언어에서 함수는 하나의 변수만 반환할 수 있습니다.


아시다시피 int 형을 반환하는 함수인데 두 개의 int 값을 반환하는 것은 말이 안 됩니다.

이 경우에 두 값을 별개로 한 번에 반환하려면 구조체를 사용하는 수밖에 없습니다.


일단 질문이 구체적인 목적이 없고 단순한 예시를 바라는 것 같으니 예시를 들어보면,


#include <iostream>
using namespace std;

struct stA
{
 int a, b;

 stA(int x, int y)  {  a = x; b = y; }
};


class Circle
{
private:
 int x, y, radius;

public:
 Circle() : x(1), y(2), radius(3) {}

 operator int()  {  return x; }

 operator float() {  return y; }

 operator double() {  return radius; }

 operator stA() {  return stA(x, y); } // 구조체의 생성자를 통해 구조체의 임시객체를 반환
};


int main(void)
{
 Circle obj;

 cout << "x : " << (int)obj << endl;
 cout << "y : " << (float)obj << endl;
 cout << "z : " << (double)obj << endl;

 cout << "a : " << ((stA)obj).a << endl; // 구조체로 형변환 후 반환된 구조체의 멤버에 접근
 cout << "b : " << ((stA)obj).b << endl;

 return 0;
}


x : 1
y : 2
z : 3
a : 1
b : 2
계속하려면 아무 키나 누르십시오 . . .


이렇게 쓸 바에야 그냥 GetX(), GetY() 함수를 호출하는 게 낫겠죠.


아무래도 두 개의 값을 모두 살려서 형변환을 해야 하는 경우가 어떤 경우가 있을지 떠오르지 않네요.




C++ << 연산자 오버로딩 질문입니다!

요즘 C++ 연산자 오버로딩을 공부하고있습니다. 교재는 열혈C++이구요... << 이랑 >> 오버로딩을 하는데 이해가 가는듯하면서 계속 헷갈립니다. 아래...

c++ 연산자 오버로딩 관련

... bool 부분에 해당하는 연산자오버로딩 하는부분 도와주시면 감사하겠습니다. 안녕하세요.. 아래의 코드로 체크하여 보세요.. 비교연산자는 중복된 감이...

c++ 연산자 오버로딩

... 연산자 오버로딩 함수의 일부분인데, 여기서 Coord&(Coord는 클래스 이름)에 &가... C++언어에서 함수의 인자와 리턴값은 기본적으로 원 변수의 복사값을...

c++ 연산자 오버로딩 관련 질문

... 오버로딩이 반환형식으론 구분이 안되는거 아는데, []연산자 오버로딩을... 복잡하고 아름다운 C++ 의 세계에 오신것을 환영합니다. method를 구분하는...

C++ 형변환 연산자 오버로딩

... 다른 연산자 오버로딩은 어떻게 끝냈는데, 형변환 연산자 오버로딩을 공부하다가 책에서 단순히 멤버변수가 한가지일 경우의 예제밖에...

C++ 연산자 오버로딩 질문이요

... cout << mat << mat2 << mat3 << endl; } ++연산자오버로딩 + 연산자 오버로딩 <<연산자 오버로딩좀 만들어주세요 안녕하세요...