728x90
반응형
단항 연산자 오버로딩
단항 연산자를 오버로딩할 때에는 피연산자가 2개 이상인 연산자의 오버로딩과 차이점이 존재한다.
단항 연산자의 경우는 아래 코드처럼 반환값을 자기 자신으로 해주어야 한다.
class Pos {
private:
int x;
int y;
public:
Pos(int x1 = 0, int y1 = 0) : x(x1), y(y1) { }
Pos& operator++() {
x+=1;
y+=1;
return *this;
}
};
단항 연산자 오버로딩의 사용
단항 연산자를 오버로딩하여 사용하는 방법은 아래와 같다.
Pos pos1(10, 15);
Pos pos2(5, 7);
pos1.operator++();
++pos2;
이때 아래와 같은 코드의 사용도 가능하다.
Pos pos1(10, 15);
++(++pos1);
오버로딩된 연산자가 객체를 반환하기 때문에 위와 같은 코드도 가능한 것이다.
전역함수에 의한 단항 연산자 오버로딩
단항 연산자도 아래 코드처럼 전역함수를 사용하여 오버로딩할 수 있다.
class Pos {
private:
int x;
int y;
public:
Pos(int x1 = 0, int y1 = 0) : x(x1), y(y1) { }
friend Pos& operator++(Pos& pos);
};
Pos& operator++(Pos& pos)
{
pos.x+=1;
pos.y+=1;
return pos;
}
전역함수에 의한 단항연산자 오버로딩의 사용
전역함수로 오버로딩한 단항연산자는 아래 코드와 같이 사용할 수 있다.
Pos pos1(10, 15);
Pos pos2(5, 7);
++pos1;
operator++(pos2);
후위 연산자 오버로딩
후위연산자를 오버로딩할 때에는 아래 코드와 같이 int 키워드를 사용한다.
Pos& operator++(int) { }
friend Pos& operator++(Pos& pos, int);
후위 연산의 경우 구현에도 차이점이 있다.
값의 증감 연산은 진행하되 전달하는 값은 연산이 진행되지 않은 값이어야 한다.
따라서 아래 코드처럼 구현하는 것이 가능하다.
class Pos {
private:
int x;
int y;
public:
Pos(int x1 = 0, int y1 = 0) : x(x1), y(y1) { }
Pos& operator++(int) {
const Pos pos(x, y); // const Pos pos(*this);
x += 1;
y += 1;
return pos;
}
};
friend 선언을 통한 전역함수로 구현하는 코드는 아래와 같다.
class Pos {
private:
int x;
int y;
public:
Pos(int x1 = 0, int y1 = 0) : x(x1), y(y1) { }
friend Pos& operator++(Pos& pos, int);
};
Pos& operator++(Pos& pos, int)
{
pos.x += 1;
pos.y += 1;
return pos;
}
728x90
반응형
'C++ > C++ 문법' 카테고리의 다른 글
[C++] std::array (array container) (0) | 2024.10.05 |
---|---|
[C++] bool 자료형 (0) | 2024.09.30 |
[C++] friend, friend 함수 (0) | 2024.09.26 |
[C++] 연산자 오버로딩을 활용한 객체의 대입 (0) | 2024.09.24 |
[C++] 연산자 오버로딩 (멤버함수와 전역함수에 의한 연산자 오버로딩) (0) | 2024.09.24 |