C++.4オブジェクト演算子オーバーライド
13728 ワード
1.内容
「演算子overriding」については、特定のオブジェクトを演算子の演算子として任意の(ユーザーが指定した)処理を行うことができます.
2.種類
3.コード(上記のタイプの関数のマージを求める)
#include <iostream>
using namespace std;
class Point
{
int xpos, ypos;
public:
Point(int x, int y)
: xpos(x), ypos(y)
{
}
// 1. '+'연산자 멤버내 오버라이딩
Point operator+(Point & pos2) // 피연산자 우측 객체 pos2
// + 우측 피연산자 = 인자(pos) / 좌측피연산자 = 함수접근 본체
{
Point pcopy(xpos + pos2.xpos, ypos + pos2.ypos);
return pcopy;
}
// '+='연산자 멤버내 오버라이딩
Point & operator+=(Point & pos2) // 피연산자 우측 객체 pos2
{
xpos += pos2.xpos; // 직접 값을 초기화
ypos += pos2.ypos;
return *this; // 연산의 주체가 되는 객체 반환
}
// 전위연산자 '++ ~' 멤버내 오버라이딩
Point & operator++() // 피연산자는 연산의 주체가 됨
{
xpos++;
ypos++;
return *this;
}
// 멤버 외(전역) 오버라이딩, 멤버변수 접근을 위해 friend지정
friend Point operator-(Point & pos1, Point & pos2);
friend Point & operator-=(Point & pos1, Point & pos2);
// 후위연산자는 두번째 인자로 "int"가 들어가야 함
friend const Point operator--(Point & pos1, int);
// 연산 완료 후 점 출력
void Showpoint() const
{
cout << "[x,y] = " << xpos << "," << ypos << endl;
}
};
// 매개변수는 함수 지시자 본체, 인자1 = 2개
Point operator-(Point & pos1, Point & pos2)
{
// pcopy 객체 생성으로 Point 클래스 생성자 호출
Point pcopy(pos1.xpos - pos2.xpos , pos1.ypos - pos2.ypos);
return pcopy; // 객체 값을 변경하는것이 아닌 연산결과만 출력하는 것이니..
}
// 감소 초기화된 본체 반환
Point & operator-=(Point & pos1, Point & pos2)
{
pos1.xpos -= pos2.xpos;
pos1.ypos -= pos2.ypos;
return pos1;
}
// 두번째 인자로 'int'를 받으며 후위증가임을 알림
const Point operator--(Point & pos1, int)
{
// 반환은 감소 전 원객체의 복사 객체로 하고, 원객체 내부 변수는 실제 초기화(감소)
Point pref = pos1;
pos1.xpos --;
pos1.ypos --;
return pref;
}
// 결과 출력
int main()
{
Point pos1={1,2}, pos2={5,7};
(pos1 + pos2).Showpoint(); // (6,9)
(pos1 - pos2).Showpoint(); // (-4,-5)
pos1 += pos2;
pos1.Showpoint(); // (6,9)
pos1 -= pos2;
pos1. Showpoint(); // (1,2)
(++pos1).Showpoint(); // (2,3)
(++(++pos1)).Showpoint(); // (4,5)
pos1--.Showpoint(); // 증가되기 전 pos1의 복사체의 멤버가 출력 (4,5)
pos1.Showpoint(); // 증가된 pos1의 멤버가 출력 (3,4)
return 0;
}
4.結果
5.結論
演算子は、基本型だけでなく、演算子overridingによって被演算子として、オブジェクトを被演算子としてもよい.
Reference
この問題について(C++.4オブジェクト演算子オーバーライド), 我々は、より多くの情報をここで見つけました https://velog.io/@croco/C.4-Operator-overridingテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol