교환법칙 문제의 해결
Programming/C++ 2012. 8. 28. 14:56 |교환법칙이란?
=> A + B 의 결과는 B + A 의 결과와 같음을 뜻한다. 즉, 연산자를 중시능로 한 피연산자의 위치는 연산의 결과에 아무런 영향을 미치지 않는다는 법칙이다.
대표적으로 교환법칙이 성립하는 연산으로는 곱셈연산과 덧셈연산이 있다.
연산자 오버로딩을 통해, 서로 다른 자료형의 두 데이터간의 연산을 가능하게하는 예제)
pos*3; 은 pos.operator*(3); 으로 해석이 된다.
위 예제에서 오버로딩 한 곱셈 연산자의 경우, Point 클래스의 멤버함수 형태로 정의했기 때문에 Point 객체가 * 연산자의 왼편에 와야 한다.
교환법칙이 성립되려면 cpy = 3 * pos; 가 성립되어야 하는데 멤버함수로는 불가능하다.
하지만 전역함수로 하면 불가능이 가능해진다.
교환법칙의 성립을 위한 구현
교환법칙이 성립하도록하려면
cpy = 3 * pos;
전역함수의 형태로 곱셈 연산자를 오버로딩 하는 수 밖에 없다. 즉, 위의 문장이 다음과 같이 해석이 되도록 연산자를 오버로딩 해야 한다.
cpy = operator*(3, pos);
이를 위해서는 operator* 함수를 다음과 같이 정의해야 한다.
Point operator*(int times, Point& ref)
{
Point pos(ref.xpos*times, ref.ypos*times);
return pos;
}
그런데, 다음과 같이 3*pos 를 pos*3 이 되도록 바꾸는 형태로 오버로딩을 해도 된다.
Point operator*(int times, Point& ref)
{
return ref*times;
}
교환법칙이 성립되면, 이렇듯 보다 자연스러운 연산문의 구성이 가능하다.
'Programming > C++' 카테고리의 다른 글
대입 연산자의 오버로딩2 (0) | 2012.09.10 |
---|---|
cout, cin 그리고 endl의 정체 (0) | 2012.08.30 |
전위증가와 후위증가의 구분 (0) | 2012.08.27 |
단항 연산자의 오버로딩 (0) | 2012.08.27 |
연산자 오버로딩 (Operator Overloading) (0) | 2012.08.25 |