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
는 실수로 주위 num
및 den
()
을 넣어 operator()
은 실제 결과에 영향을의 출력에서 나는 우선 순위를 깨달았다. 홀수 인 operator ,
만 사용하여 평가했습니다. 그래서 내 질문은,이 특별한 상황에서 운영자 ()
의 영향을 무시하는 방법 (매크로일까요?)이 있습니까?
()는'여기에는 '연산자가 없습니다. –
아니요, 기본 연산자 인'operator '를 사용하여'operator ='만 평가했습니다. 이것이 괄호를 사용할 때 일어나는 일입니다. 그리고 당신이 원하는 것을 할 수있는 방법이 없습니다. –
mg. 오랫동안 악용 사례를 보았 기 때문에 오랜 시간이 걸렸습니다. – usr