연산자에는 대표적으로 사칙 연산, 대입 연산, 비교 연산이 있다.
이때 우리가 만든 클래스는 해당 연산을 사용할 수 없다. 우리가 연산자를 정의하지 않았기 때문이다.
이제 클래스를 위한 연산자를 만들어본다.
연산자 오버로딩
오버로딩은 겉은 같지만 속은 다르다를 떠올리면 된다.
같은 연산자(+, -)라 할지라도 피연산자에 따라 다른 연산을 수행한다.
int number = 1 + 1;
string str = "예시" + "입니다";
위와 같은 연산을 수행하면 number에는 2가 str에는 "예시입니다"가 저장된다. 이처럼 연산자는 같지만 자료형에 따라 숫자를 더하거나 문자열을 붙이거나 한다.
멤버 연산자 함수
우리가 정의한 클래스가 연산자를 이용하려면 멤버 또는 전역 연산자 함수를 정의해야 한다.
먼저 멤버 연산자 함수를 살펴보자.
class Position
{
public:
// 멤버 연산자 함수
// 항상 왼쪽을 기준으로 한다. -> 연산할 때 순서를 신경써야 한다.
Position operator+(const Position& arg)
{
Position pos;
pos._x = _x + arg._x;
pos._y = _y + arg._y;
return pos;
}
public:
int _x;
int _y;
};
int main()
{
Position pos;
pos._x = 0;
pos._y = 0;
Position pos2;
pos2._x = 0;
pos2._y = 0;
// 연산자 함수를 정의해야 한다.
Position pos3 = pos + pos2; // == pos3 = pos.operator+(pos2);
return 0;
}
우리가 만든 멤버 연산자 함수는 x축과 y축을 더하는 함수다.
이때, 연산자 기준으로 왼쪽에는 클래스가 있어야 한다는 점을 기억하자.
왼쪽이 클래스가 아니면 사용하지 못하기 때문에, 우리가 만든 함수도 클래스가 있다는 가정하에 만들었다.
때문에 피연산자의 위치에 주의해야 한다.
전역 연산자 함수
// 전역 연산자 함수
Position operator+(int a, const Position& b)
{
Position pos;
pos._x = b._x + a;
pos._y = b._y + a;
return pos;
}
int main()
{
Position pos4 = 1 + pos3;
return 0;
}
전역 연산자 함수는 클래스 외부에 존재한다.
이 함수는 어느쪽을 기준으로 하지 않기에 멤버 연산자 함수보다 조금 더 자유롭게 이용할 수 있다.
참고로 대입 연산을 하기 위해서는 멤버 연산자 함수를 이용해야 한다.
출처
https://www.inflearn.com/course/%EC%96%B8%EB%A6%AC%EC%96%BC-3d-mmorpg-1/dashboard
[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part1: C++ 프로그래밍 입문 - 인프런 | 강의
시리즈를 원활하게 학습하기 위한 기초적인 C++ 문법들에 대해 학습합니다. 어셈블리 언어부터 시작해서 기본 C++ 문법, STL, C++11까지 핵심적인 내용을 압축해서 다루게 됩니다., - 강의 소개 | 인
www.inflearn.com
'프로그래머 > CPP_강의정리' 카테고리의 다른 글
cpp 동적 할당과 인자로 받는 클래스 주의점 (0) | 2021.09.20 |
---|---|
cpp struct와 class의 차이, static (0) | 2021.09.20 |
cpp 객체지향(6-초기화 리스트) (0) | 2021.09.20 |
cpp 가상 함수(아직 이해 안 됨) (0) | 2021.09.19 |
cpp 객체지향(4-은닉성) (0) | 2021.09.19 |