연산자 오버로딩 =과 ==

2019. 8. 19. 11:02PL/C++

대입 연산자인 =의 연산자 오버로딩은 기본적으로 정의되어있지만, ==은 애매하기 때문에 사용자가 연산자 오버로딩을 정의해야만 한다

 

#include <string>
#include <iostream>

using namespace std;

class Person {
private:
	string name;

public:
	Person(string name) {
		this->name = name;
	}
	bool operator==(const Person &other) {
		return this->name == other.name;
	}
};

int main(void) {
	Person A("수리");
	Person B("노을");
	if (A == B) {
		cout << "같다\n";
	}
	else {
		cout << "다르다\n";
	}

	A = B;
	if (A == B) {
		cout << "같다\n";
	}
	else {
		cout << "다르다\n";
	}

	return 0;
}

 

 

[추가 19.08.20] +연산자를 정의하면 자동적으로 +=이 정의되는 줄 알았지만 실제로 그렇게 동작하지는 않고, +=도 따로 연산자 오버로딩으로 정의해야만 한다

 

#include <iostream>

using namespace std;

class Point {
private:
	int x, y;

public:
	Point(int x, int y) : x(x), y(y) {}
	Point& operator+(const Point &other) {
		x += other.x;
		y += other.y;
		return *this;
	}
	Point& operator+=(const Point &other) {
		x += other.x;
		y += other.y;
		return *this;
	}
	int getX() {
		return x;
	}
	int getY() {
		return y;
	}
};

int main(void) {
	Point p1(1, 2);
	Point p2(3, 4);
	Point p3 = p1 + p2;
	cout << p3.getX() << ' ' << p3.getY() << '\n';
	p1 += p2;
	cout << p1.getX() << ' ' << p1.getY() << '\n';
	return 0;
}