Programming/C C++
+ 나 - 같은 연산자는 통상 정수같은 수치연산에 사용되는 것이 기본입니다.
int i = 10;
int j = 5;

cout << i - j << endl;
그러나 위와 같이 기본적으로 정의된 연산자의 기능을 클래스(Class)단위에서 재정의하여 사용할 수 있는데 이것을 연산자 오버로딩(Operator Overloading)이라고 합니다.
class number_2
{
public:
   int i;
   int j;

   number_2(int a, int b);
   number_2 operator + (number_2 n2);
};

위 number_2 클래스에는 +연산자에 대한 오버로딩이 구현되어 있는데 7행은 클래스생성자이고 8행이 연산자 오버로딩 부분입니다.

연산자 오버로딩은 위 예제처럼 '클래스 operator + (데이터형)' 형식으로 선언됩니다.

number_2 number_2::operator + (number_2 n2)
{
   i += n2.i;
   j += n2.j;

 return number_2(i, j);
}
연산자 오버로딩을 선언하였으면 실제 클래스에 대해 연산자가 어떤형태로 기능을 수행할 것인지에 대해 위 예제처럼 그 기능이 정의되어 있어야 합니다.

예제는 데이터형으로 전달받은 클래스의 객체에서 i와 j변수의 값을 가져와 자신이 가지고 있는 i와 j변수의 값을 더하게 됩니다. 그런 후 6행에 보시는 것처럼 해당 클래스에 대한 생성자를 호출하고 그 객체를 반환하도록 하였습니다.
number_2::number_2(int a, int b):i(a), j(b)
{
 //
}
number_2의 생성자입니다. 생성자 호출시 전달받은 a와 b의 값을 자신의 i와 j변수에 순서대로 대입합니다.
number_2 n2_1(10, 20);
number_2 n2_2(100, 200);

number_2 n2_3 = n2_1 + n2_2;

cout << n2_3.i << " - " << n2_3.j << endl;
1과 2행에서 number_2의 객체를 각각 생성하고 4행에서 생성된 클래스에 대해 + 연산을 수행하고 있습니다. + 연산자는 객체가 가지고 있는 i와 j를 더하여 새로운 클래스의 객체를 반환해야 한다는 것을 클래스내부의 연산자 오버로딩 부분을 통하여 잘 알고 있는 상황이므로 원하는 결과값을 볼 수 있을 것입니다.

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

[Visual C++] 복사생성자  (0) 2012.10.09
[Visual C++] 클래스(Class) 의 기본  (5) 2012.10.08
[Visual C++] 연산자 오버로딩(Operator Overloading)  (0) 2012.10.05
[Visual C++] 포인터와 참조  (2) 2012.07.12
[Visual C++] typedef  (0) 2012.07.06
[Visual C++] 구조체  (0) 2012.07.05
0 0