728x90
닪ㅇ 연산자와 이항 연산자의 가장 큰 차이는 피연산자의 개수
증가 연산자 ++
감소 연산자 --
++pos => 멤버함수로 오버로딩 된 경우: pos.operator++();
전역함수로 오버로딩 된 경우: operator++(pos);
#include <iostream>
using namespace std;
class Point
{
private:
int xpos, ypos;
public:
Point(int x = 0, int y = 0):xpos(x), ypos(y)
{}
void ShowPosition() const
{
cout << '[' << xpos << ", " <<ypos << ']' << endl;
}
Point& operator++()
{
xpos += 1;
ypos += 1;
return *this;
}
friend Point & operator--(Point &ref);
}
Point& operator--(Point &ref)
{
ref.xpos -= 1;
ref.ypos -= 1;
return ref;
}
int main(void)
{
Point pos(1, 2);
++pos;
pos.ShowPosition();
--pos;
pos.ShowPosition();
++(++pos); //++연산자는 멤버함수의 형태로 오버로딩 되었으므로, 이 문장은 pos.operator++();으로 해석됨
pos.ShowPosition();
--(--pos); //--연산자는 전역함수의 형태로 오버로딩 되었으므로, 이 문장은 operator--(pos);으로 해석됨
pos.ShowPosition();
return 0;
}
결과)
[2, 3]
[1, 2]
[3, 4]
[1, 2]
전위증가와 후위증가의 구분
다음과 같이 규칙을 정해놓고 있음
++pos => pos.operator++(); //전위
pos++ => pos.operator++(int); //후위
--pos -> pos.operator--(); //전위
pos-- -> pos.operator--(int); //후위
#include <iostream>
using namespace std;
class Point
{
private:
int xpos, ypos;
public:
Point(int x = 0, int y = 0):xpos(x), ypos(y)
{}
void ShowPosition() const
{
cout << '[' << xpos << ", " <<ypos << ']' << endl;
}
Point& operator++()//전위증가
{
xpos += 1;
ypos += 1;
return *this;
}
const Point& operator++(int)//후위증가
{
const Point retobj(xpos, ypos); //함수 내에서 retobj의 변경을 막겠다!
xpos += 1;
ypos += 1;
return retobj;
}
friend Point & operator--(Point &ref);
friend const Point & operator--(Point &ref, int);
}
Point& operator--(Point &ref)//전위감소
{
ref.xpos -= 1;
ref.ypos -= 1;
return ref;
}
Point& operator--(Point &ref, int)//후위감소
{
const Point retobj(ref); //함수 내에서 retobj의 변경을 막겠다!
ref.xpos -= 1;
ref.ypos -= 1;
return ref;
}
int main(void)
{
Point pos(3, 5);
Point cpy;
cpy = pos--;
cpy.ShowPosition();
pos.ShowPosition();
cpy = pos++;
cpy.ShowPosition();
pos.ShowPosition();
return 0;
}
후위연산에는 const가 붙으므로 (num++)++; 같은 경우 컴파일 ERROR!
728x90
'LANG > C++' 카테고리의 다른 글
[C++]10-4.cout, cin 그리고 endl의 정체 (0) | 2023.05.18 |
---|---|
[C++]10-3.교환법칙 문제의 해결 (0) | 2023.05.18 |
[C++]10-1.연산자 오버로딩의 이해와 유형 (0) | 2023.05.18 |
[C++]08-3.가상 소멸자와 참조자의 참조 가능성 (0) | 2023.05.16 |
[C++]08-2.가상함수(Virtual Function) (1) | 2023.05.16 |