오늘은 연산자를 직접 구현해보는 시간을 갖도록 하겠습니다. 일반적인 연산자 +, -, *, / 등 다양한 연산자들이 있는데 이 연산자를 직접 만들어 사용하는 방법을 실습하도록 하죠.
일반적인 덧셈(+)은 다음과 같습니다.
c=a+b;
여기서 덧셈(+) 연산자를 만나 a,b를 더하는 계산을 수행합니다. 이 덧셈 함수를 만들 수 있는데 다음과 같은 operator 키워드를 이용하여 만들 수 있습니다.
클래스명 operator연산자(인자){
연산처리식;
}
예)
AAA operator+(const AAA &p){
AAA s;
s=a+p.a;
return s;
}
이렇게 구현 할 수 있습니다.
AAA op1;
AAA op2;
AAA op3;
op3=op1+op2;
이렇게 클래스 객체 덧셈을 수행 할 수 있게 됩니다.
위 op1+op2 표현은 아래와 같은 표현입니다.
op1.operator+(op2);
'+'기호만으로 operator+()함수를 지칭합니다. 이렇게 표현 함으로 기존의 '+' 연산을 무시하고 직접 만든 '+'연산을 수행합니다. 이런 걸 연산자 오버로딩이라고 합니다.
한번 몇가지 간단하게 코딩해서 실습 결과를 살펴보도록 하죠.
[전체소스]
#include
using namespace std;
class AAA{
private:
int a;
public:
AAA operator=(int _a){
a=_a;
}
AAA operator+(const AAA &p){
AAA s;
s=a+p.a;
return s;
}
AAA operator+(int b){
AAA s;
s=a+b;
return s;
}
AAA operator-(const AAA &p){
AAA s;
s=a-p.a;
return s;
}
void output(){
cout<<a<<endl;
}
};
int main(int argc, char** argv) {
AAA op1;
AAA op2;
AAA op3;
op1=10; //op1.operator=(10);
op2=20; //op2.operator=(20);
op1.output();
op2.output();
op3=op1+op2; //op3=op1.operator+(op2);
op3.output();
op3=op1+100; //op3=op1.operator+(100);
op3.output();
op3=op1-op2; //op3=op1.operator-(op2);
op3.output();
return 0;
}
객체 대입 연산을 수행하고 객체 덧셈, 뺄셈을 수행합니다. 추가로 객체+상수를 더하는 연산도 수행하도록 실습 코딩을 만들어 봤네요.
[결과]
결과는 우선 op1, op2에 값을 대입한 값을 출력하고 다음으로 op1+op2의 값, op1+100의 값, op1-op2값을 순서대로 출력 된 결과 입니다.
오늘의 내용은 연사자 함수를 직접 만들어 보았습니다. 그리고 그 함수는 기존의 연산자와 중복 된 이름을 가지고 있는데 이 함수를 오버로딩 함수라고 합니다. 지난 시간에 오버로딩 함수에 대해 배웠었는데 이번에 연산자 함수를 통해 복습을 하게 되었네요.