리턴타입 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]
{
함수 본체;
}
[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]