오버로딩이란 함수(메소드)명은 같으나 인자나 반환형태가 다른 함수들을 말한다.

연산자 오버로딩이란 연산자를 오버로딩하여 사용하는 것으로 

일반적인 경우가 아니더라도 연산자를 사용하여 동작을 수행할 수 있게 해준다.


설명이 어렵긴한데 예제를 보면 좀 이해가 편할듯

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
#pragma once
class CNumber
{
public:
    CNumber();
    ~CNumber();
 
    CNumber operator+(const CNumber & des);
    CNumber operator+(int des);
    CNumber operator-(const CNumber & des);
    CNumber operator-(int des);
    CNumber operator*(const CNumber & des);
    CNumber operator*(int des);
    CNumber operator/(const CNumber & des);
    CNumber operator/(int des);
 
    void operator+=(const CNumber & des);
    void operator+=(int des);
    void operator-=(const CNumber & des);
    void operator-=(int des);
    void operator*=(const CNumber & des);
    void operator*=(int des);
    void operator/=(const CNumber & des);
    void operator/=(int des);
 
    operator int() const
    {
        return num;
    }
 
    void set(int n) { num = n; }
    int get() { return num; }
private:
    int num;
};
 
cs

연산자 오버로딩은 operator 뒤에 연산자를 붙여서 함수처럼 새로 만들어 정의하면

숫자가 아닌 string이나 class 등의 연산자 사용을 가능하게 한다.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
#include "stdafx.h"
#include "CNumber.h"
 
 
CNumber::CNumber()
{
}
 
 
CNumber::~CNumber()
{
}
 
CNumber CNumber::operator+(const CNumber & des)
{
    CNumber result;
    result.num = this->num + des.num;
    return result;
}
 
CNumber CNumber::operator+(int des)
{
    CNumber result;
    result.num = this->num + des;
    return result;
}
 
CNumber CNumber::operator-(const CNumber & des)
{
    CNumber result;
    result.num = this->num - des.num;
    return result;
}
 
CNumber CNumber::operator-(int des)
{
    CNumber result;
    result.num = this->num - des;
    return result;
}
 
반복...
 
 
void CNumber::operator+=(const CNumber & des)
{
    this->num += des.num;
}
 
void CNumber::operator+=(int des)
{
    this->num += des;
}
 
void CNumber::operator-=(const CNumber & des)
{
    this->num -= des.num;
}
 
void CNumber::operator-=(int des)
{
    this->num -= des;
}
 
반복...
 
cs

이런식으로 연산자를 사용했을때 어떤식으로 동작할지 정의하여 사용할 수 있다.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
#include "stdafx.h"
#include "CNumber.h"
#include <iostream>
using namespace std;
 
void main()
{
    CNumber a;
    a.set(50);
    CNumber b;
    b.set(25);
    CNumber c;
    c = a + b;
    cout << c.get() << endl;
    c = a - b;
    cout << c.get() << endl;
    c = a * b;
    cout << c.get() << endl;
    c = a / b;
    cout << c.get() << endl;
 
    a += a;
    cout << a.get() << endl;
    a -= a/2;
    cout << a.get() << endl;
    a *= b;
    cout << a.get() << endl;
    a /= b;
    cout << a.get() << endl;
}
 
cs

연산자 오버로딩을 통하여 이렇게 클래스에서도 연산자를 사용할 수 있게 되었다.

다른 프로그램에서도 사람들이 만들어둔 수많은 함수들이 연산자 오버로딩을 통해 연산자의 사용이 가능한 것이다.

'프로그래밍 공부 > C++' 카테고리의 다른 글

상속, 오버라이딩  (0) 2018.03.21
문자열 연결 및 비교(연산자 오버로딩 예제)  (0) 2018.03.21
클래스 사용예제  (0) 2018.03.21
객체지향, 클래스  (0) 2018.03.21
동물 스무고개(?) (Tree연습 예제)  (0) 2018.03.21
Posted by misty_
,