2012-03-25 3 views
0

frac = 1, 2 다음 구문을 사용하여 소수를 할당 할 수 있도록 연산자 ,을 오버로드하고 싶습니다. () 연산자 없이는 정상적으로 작동했습니다.괄호의 기본 동작을 재정의하는 방법이 있습니까?

#include <iostream> 

using namespace std; 

class fraction { 
private: 
    int m_num; 
    int m_den; 

public: 
    fraction(int num, int den) 
     :m_num(num), m_den(den) { 

    } 

    fraction& operator =(int num) { 
     m_num = num; 
     return *this; 
    } 

    fraction& operator ,(int den) { 
     m_den = den; 
     return *this; 
    } 

public: 
    friend 
     ostream& operator <<(ostream& out, const fraction& rhs) { 
     return out << rhs.m_num << ", " << rhs.m_den; 
    } 
}; 

int main() { 
    fraction f(1, 2); 
    cout << "original f = " << f << endl; 

    f = 4, 5; 
    cout << "expected = " << f << endl; 

    f = (10, 11); 
    cout << "unexpected = " << f << endl; 
} 

** OUTPUT

$ prog.exe 
original f = 1, 2 
expected = 4, 5 
unexpected = 11, 5 

는 실수로 주위 numden()을 넣어 operator()은 실제 결과에 영향을의 출력에서 ​​나는 우선 순위를 깨달았다. 홀수 인 operator , 만 사용하여 평가했습니다. 그래서 내 질문은,이 특별한 상황에서 운영자 ()의 영향을 무시하는 방법 (매크로일까요?)이 있습니까?

+0

()는'여기에는 '연산자가 없습니다. –

+0

아니요, 기본 연산자 인'operator '를 사용하여'operator ='만 평가했습니다. 이것이 괄호를 사용할 때 일어나는 일입니다. 그리고 당신이 원하는 것을 할 수있는 방법이 없습니다. –

+3

mg. 오랫동안 악용 사례를 보았 기 때문에 오랜 시간이 걸렸습니다. – usr

답변

2

적어도 하나의 인수가 사용자 정의 인 경우에만 연산자를 오버로드 할 수 있습니다. 귀하의 주장에서 귀하의 주장은 모두 int입니다. 따라서 할 수있는 일은 없습니다. (operator,의 의심 사용을 피하는 이외에!)

관련 문제