본문 바로가기

Native/C++

연산자 함수 (operator function)

리턴타입 Class::operator 연산자(인수 목록)
{
    함수 본체;
}
[code]
class Complex
{
private:
    double real;
    double image;

public:
    Complex() { }
    Complex(double r, double i) : real(r), image(i) { }
    void OutComplex() const { printf("%.2f+%.2fi\n",real,image); }

    // + 에 대한 연산자를 함수로서 operator + 가 중요!!
    const Complex operator +(const Complex &T) const {
        Complex R;
        R.image = image + T.image;
        R.real = real + T.real;
        return R;
    }
};

// 인수를 포인터를 사용하지 않고 주소를 받는 이유
포인터로 넘겨진 피연산자의 멤버를 참조하려면 . 연산자 대신 ->연산자를 사용하기만 하면 된다. 그러나 연산자 함수가 포인터를 받아들이면 이 함수를 호출할 때 피연산자의 주소를 넘겨야 하므로 호출부의 모양이 C3=C1.operator +(&C2);가 될 것이고 이를 연산식으로 표현하면 C3=C1+&C2; 가 되는데 이런 형식은 연산문의 일반적인 표기법에 어긋나며 전혀 직관적이지 못하다. 정수형의 경우 i=j+&k;로 연산하지 않는 것과 마찬가지이다

// 인수를 const로 사용하는 이유
보통의 경우는 인수는 항상 읽기만 하는 기능이기 때문에 변경할 이유가 없기에 const로 받는다.
[/code]

'Native > C++' 카테고리의 다른 글

Overloading operator function  (0) 2013.10.02
전역 연산자 함수  (0) 2013.10.02
revolve  (0) 2013.10.02
dArray  (0) 2013.10.02
mutable  (0) 2013.10.02