티스토리 뷰
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 |
댓글