Post

[C++] 연산자 오버로딩 #9

1. 연산자 함수

연산자 함수란 객체간의 연산이 시작될 때 호출되는 함수입니다.
연산자 함수는 클래스를 정의할 때 직접 만들 수 있습니다.

예를 들어 좌표를 나타내는 Position이라는 객체가 있을 때,
아래 코드와 같이 연산자 함수를 사용한다면, Position객체끼리 덧셈이나 뺄셈이 가능하게 됩니다.

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
#include <iostream>

class Position {
public:
    int x;
    int y;
    int z;

    Position(int x, int y, int z) {
        this->x = x;
        this->y = y;
        this->z = z;
    }

    Position operator+(const Position& ref) const {
        return Position(x + ref.x, y + ref.y, z + ref.z);
    }
};

int main() {
    Position a(1, 1, 1);
    Position b(2, 2, 2);
    Position c = a + b; // operator+ 함수 호출!

    std::cout << c.x << " " << c.y << " " << c.z;

    return 0;
}
1
3 3 3

operator와 정의할 연산자를 이어 쓴 이름으로 함수를 만들면
그 연산자로 객체를 연산하려 할 때 정의된 함수가 실행됩니다.

또한 연산자 함수가 실행되는 객체는 연산자 기준 왼쪽에 있는 a가 됩니다.
따라서 Position& ref는 b를 참조하게 됩니다.

This post is licensed under CC BY 4.0 by the author.