연산자 오버로딩이란?
연산자 오버로딩(Operator Overloading)은 C++의 핵심 개념 중 하나로, 다형성(polymorphism)의 한 형태입니다. 기존에 정의된 연산자에 사용자가 직접 새로운 의미를 부여함으로써, 사용자 정의 데이터 타입에 대해서도 해당 연산을 수행할 수 있게 해주는 기능입니다. 예를 들어 '+' 연산자를 오버로딩하면 정수형 덧셈뿐만 아니라 문자열 연결(concatenation)처럼 다양한 데이터 타입에 맞는 동작을 구현할 수 있습니다.
입력
10 20 20 30
출력
30 50
동작 원리
이 예제에서는 '-' 연산자를 오버로딩하여 두 숫자의 덧셈을 수행합니다. 이항 연산자(binary operator)는 연산을 수행하기 위해 하나의 객체를 인수로 요구하며, 프렌드 함수(friend function)를 사용할 경우에는 두 개의 인수가 필요합니다.
연산자는 ob1-ob2 형태로 호출됩니다. 이때 연산자 앞에 있는 객체(ob1)가 함수를 호출하는 역할을 하고, 연산자 뒤에 있는 객체(ob2)는 함수의 인수로 전달됩니다. 즉, ob1은 호출하는 객체이고 ob2는 함수에 넘겨지는 인수입니다.
여기서는 ob1의 x, y 멤버 변수에 각각 10과 20을, ob2의 x, y 멤버 변수에 각각 20과 30을 저장한 뒤 연산을 수행합니다.
예제 코드
#include <iostream>
using namespace std;
class sum {
public:
int x, y, z;
void getdata(int a, int b) {
x=a;
y=b;
}
void display() {
cout<<"\nSum of X:"<<x;
cout<<"\nSum of Y:"<<y;
}
void operator-(sum &);
};
void sum::operator-(sum &ob) {
x=x+ob.x;
y=y+ob.y;
display();
}
int main() {
sum ob1, ob2;
ob1.getdata(10,20);
ob2.getdata(20,30);
ob1-ob2;
}