[1번 문제]
/*
부호 연산자로는 -는 단항 연산자이다.
이 연산자는 피연산자의 부호를 반전시킨 겨로가를 반환한다.
예를 들어서 다음 문장이 실행되면,
int num2= -num1;
num2에는 num1과 절대값은 같지만 부호가 다른 값이 저장된다.
물론 num1의 값에는 영향을 미치지 않는다.
이와 유사하게 Point 클래스를 대상으로 - 연산자를 오버로딩 해보자.
다음의 문장이 실행되면, Point pos2= -pos1;
Pos2의 멤버변수는 pos1의 멤버변수 값과 다른 부호의 값으로 초기화되도록 오버로딩해보자
*/
#include <iostream>
using namespace std;
class Point
{
private:
int xpos;
int ypos;
public:
Point(int x = 0, int y = 0) :xpos(x), ypos(y)
{
}
void ShowPosition()
{
cout << '[' << xpos << ", " << ypos << ']' << endl;
}
Point &operator-(Point &ref)
{
//책에서는 Point pos(-xpos, -ypos);
xpos = -ref.xpos;
ypos = -ref.ypos;
return *this;
}
};
int main(void)
{
Point pos1 = { 3, 4 };
Point pos2; //0, 0으로 초기화
pos1.ShowPosition();
(pos2 - pos1).ShowPosition();
return 0;
}
[2번 문제]
/*
~연산자는 단항 연산자로서 비트단위 not의 의미를 갖는다.
즉, ~연산자는 비트단위로 1은 0으로, 0은 1로 바꾼다.
이에 우리는 Point 객체를 대상으로 다음과 같이 연산이 가능하도록 ~연산자를 오버로딩하고자 한다.
Point pos2= ~pos1;
위의 ~연산의 결과로 반환된 객체의 xpos 멤버에는 pos1의 ypos값이,
반환된 객체의 ypos 멤버에는 pos1의 xpos 값이 저장되어야 한다
*/
#include <iostream>
using namespace std;
class Point
{
private:
int xpos;
int ypos;
public:
Point(int x = 0, int y = 0) :xpos(x), ypos(y)
{
}
void ShowPosition()
{
cout << '[' << xpos << ", " << ypos << ']' << endl;
}
friend Point &operator~(Point &ref);
};
Point &operator~(Point &ref)
{
int temp = ref.xpos;
ref.xpos = ref.ypos;
ref.ypos = temp;
//책에서는 Point pos(ref.ypos, ref.xpos);
return ref;
}
int main(void)
{
Point pos1 = { 3, 4 };
pos1.ShowPosition();
(~pos1).ShowPosition();
return 0;
}
개발 환경:Visual Studio 2017
지적, 조언, 질문 환영입니다! 댓글 남겨주세요~
[참고] 열혈 C++ 프로그래밍 윤성우 저
'C++ > 열혈 C++ 프로그래밍(윤성우 저)' 카테고리의 다른 글
열혈 C++ 프로그래밍 11-1 문제 (0) | 2017.06.12 |
---|---|
열혈 C++ 프로그래밍 10-3 문제 (0) | 2017.06.08 |
열혈 C++ 프로그래밍 10-1 문제 (0) | 2017.06.08 |
OOP 단계별 프로젝트 7 (0) | 2017.06.08 |
OOP 단계별 프로젝트 6 (0) | 2017.06.06 |