교환법칙이란?


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

}



교환법칙이 성립되면, 이렇듯 보다 자연스러운 연산문의 구성이 가능하다.

Posted by scii
: