Minwoo Dev.
[C++] 윤성우의 열혈 C++ ch 10-2 단항 연산자 오버로딩 문제풀이 본문
728x90
반응형
SMALL
문제 1 : 멤버 함수의 형태로 오버로딩
부호 연산자로서 -는 단항 연산자이다. 이 연산자는 피연산자의 부호를 반전시킨 결과는 반환한다. 예를 들어서 다음 문장이 실행되면,
int num2 = -num1;
num2에는 num1과 절대값은 같지만 부호가 다른 값이 저장된다. 물론 num1의 값에는 영향을 미치지 않는다.
이와 유사하게 Point 클래스를 대상으로 - 연산자를 오버로딩 해보자.
다음의 문장이 실행되면,
Point pos2 = - pos1;
pos2의 멤버변수는 pos1의 멤버변수 값과 다른 부호의 값으로 초기화되도록 오버로딩 해보자.
정답
// - 연산자 오버로딩
#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-(){
Point pos(-xpos, -ypos);
return pos;
}
};
int main(void){
Point pos1(3, 4);
Point pos2 = -pos1;
pos2.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, ypos;
public:
Point(int x=0, int y=0):xpos(x),ypos(y){}
void ShowPosition() const{
cout << '[' << xpos << ", " << ypos << ']' << endl;
}
friend Point operator~(const Point &pos);
};
Point operator~(const Point &p){
Point pos(p.ypos, p.xpos);
return pos;
}
int main(void){
Point pos1(3, 4);
Point pos2 = ~pos1;
pos2.ShowPosition();
return 0;
}
실행 결과
728x90
반응형
LIST
'C++' 카테고리의 다른 글
[C++] 연산자 오버로딩이란, +-*/ 연산자 오버로딩 방식 (0) | 2024.07.19 |
---|---|
[C++] 윤성우의 열혈 C++ 10-3 입력을 위한 >> 연산자의 오버로딩 문제풀이 (0) | 2024.07.18 |
[C++] 윤성우의 열혈 C++ ch 10-1 두 가지 방법의 연산자 오버로딩 문제풀이 (0) | 2024.07.18 |
[C++] 다중 상속(Multiple Inheritance), 가상 상속(Virtaul Inheritance) (0) | 2024.07.18 |
[C++] 가상 함수(Virtual Function) (0) | 2024.07.17 |