티스토리 뷰

C++

[C++] 8. 연산자 오버로딩

JH_ 2021. 11. 16. 17:29

1. 연산자 오버로딩

  • 연산자의 기능을 클래스에서 새롭게 정의하여 사용하는 것
  • 숫자, 문자를 대상으로 하는 연산자를 재정의하여 편리한 프로그래밍 제공

<연산자 오버로딩 사용 이유>

  • 일반적으로 문자나 좌표 등을 더할 수 없지만 다양한 덧셈에 사용할 수 있도록 연산자의 의미를 재정의하는 것
  • "I" + "Love you" / (1,2) + (3,4)

 

1) 단항 연산자 오버로딩

  • 단항 연산자는 ++, --, (부호)가 있음 = 매개변수가 필요없음
  • 리턴형 operator 연산자명( ); //후치는 int를 써서 구분함
#include <iostream>
using namespace std;
class Point {
private:
	int x, y;
public:
	Point(int i, int j) { x = i; y = j; }
	Point operator ++() //전치 연산자
	{
		++x; ++y; 
		return *this; 
	} 
	Point operator ++(int) //후치 연산자
	{
		x++; y++;
		return *this;
	}
};
  • 리턴형이 Point형이므로 Point클래스의 멤버 변수 x, y를 둘 다 리턴한다는 뜻

2) 이항 연산자 오버로딩

  • 이항 연산자는 +,-,*,/ 등 양쪽에 피연산자가 필요한 연산자 = 한개의 매개변수가 필요함
  • 1+2에서 1을 연산자의 주체라고 보고, 2를 매개변수라고 봄
  • 리턴형 operator 연산자명(매개변수);
#include <iostream>
using namespace std;
class Point {
	int x, y;
public:
	Point(int i, int j) { x = i; y = j; }
	Point() { x = 0; y = 0; }
	Point operator +(Point ob) {
		Point temp;
		temp.x = x + ob.x; //x는 ob1, ob.x는 ob2
		temp.y = y + ob.y;
		return temp;
	}
};
int main()
{
	Point ob1(1, 2), ob2(10, 20);
	return 0;
}

 

2. 형변환 함수

  • 한 객체의 자료형을 다른 객체의 자료형으로 변환시키고자 할 때 사용함
  • operator 리턴형( ) { return 변환값; } 
  • 리턴형은 변환하고자 하는 자료형, 변환값은 변환을 수행할 값
#include <iostream>
using namespace std;
class Point {
private:
	int x, y;
public:
	Point() { x = 0; y = 0; }
	Point(int i, int j) { x = i; y = j; }
	operator int() { return x * y; }
};
int main()
{
	Point ob1(3, 4);
	cout << ob1; //12가 출력됨
	return 0;
}

'C++' 카테고리의 다른 글

[C++] 10. 오버라이딩 (가상함수)  (0) 2021.11.30
[C++] 9. 상속  (0) 2021.11.23
[C++] 7. 함수 오버로딩과 디폴트 매개변수  (0) 2021.11.09
[C++] 5. const  (0) 2021.11.02
[C++] 4. 생성자와 소멸자  (0) 2021.10.19
댓글
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday