C++ 연산자 오버로딩
안녕하세요 열코입니다.
저번시간에 함수 오버로딩에 대해 알아보았는데요.
이번시간에는 연산자 오버로딩에 대해 알아보도록 하겠습니다.
☞ 연산자 오버로딩이란
기존의 제공하고 있는 연산자를 재정의하여 사용자 정의 클래스로 사용하는 것을 말합니다.
대부분의 기본 제공 연산자 함수는 전역 함수 또는 클래스로 재정의 가능합니다.
오버로드 된 연산자는 함수로 구현됩니다.
☞ 연산자 오버로드에 대한 일반 규칙
**과 같은 새로운 연산자를 정의할 수는 없습니다.
기본 제공 데이터 형식에 적용할 때 연산자의 의미를 다시 정의 할 수 없습니다.
오버로드 된 연산자는 비정적(non-static) 클래스 멤버 함수거나 전역 함수이어야 합니다.
단항 연산자 또는 이항 연산자(&, *, +, -)로 오버로드 가능하며 각 사용을 별도로 오버로드 할 수 있습니다.
멤버 함수로 오버로드된 연산자의 첫번째 파라미터는 항상 연산자가 호출되는 객체의 클래스 형식입니다.
☞ 오버로딩 불가능한 연산자
아래 표의 연산자들은 오버로드 할 수 없습니다.
연산자 |
이름 |
. |
멤버선택 |
.* |
멤버 포인터 선택 |
:: |
범위 |
?: |
조건 |
# |
문자열 전처리기 변환 |
## |
전처리기 연결 |
☞ 간단한 예
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 | #include <iostream> using namespace std; class Point { private : int x, y; public : Point(int x_, int y_) { x = x_; y = y_; } void print() { cout << "x : " << x << ", y : " << y << "\n"; } }; int main(void) { Point p1 = { 1, 1 }; Point p2(2, 2); Point p3 = p1 + p2; p3.print(); return 0; } | cs |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 | #include <iostream> using namespace std; class Point { private : int x, y; public : Point(int x_, int y_) { x = x_; y = y_; } void print() { cout << "x : " << x << ", y : " << y << "\n"; } Point operator + (Point& p) { x = x + p.x; y = y + p.y; return Point(x, y); } }; int main(void) { Point p1 = { 1, 1 }; Point p2(2, 2); Point p3 = p1 + p2; p3.print(); return 0; } | cs |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | #include <iostream> using namespace std; class DIV { private : int num, div; public : DIV(int n, int d) { num = n; div = d; } operator double() const { return double(num) / double(div); } }; int main(void) { DIV d(1, 3); double db = d; cout << d; return 0; } | cs |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 | #include <iostream> using namespace std; class Point { private : int x, y; public : Point(int x_, int y_) { x = x_; y = y_; } friend ostream& operator<<(ostream&, const Point&); }; ostream& operator<<(ostream& os, const Point& p) { os << p.x << ", " << p.y; return os; } int main(void) { Point p(2, 3); cout << p; return 0; } | cs |
이상 '연산자 오버로딩'에 대해 알아보았습니다.
질문 또는 오타나 잘못된 정보가 있는 경우 댓글로 달아주세요!
공감♡ 버튼을 눌러주시면 더욱 유용하고 좋은 포스팅으로 찾아 뵙겠습니다.
[관련 게시글]
2018/10/11 - [C, C++] - C++ 함수 오버로딩
2018/10/10 - [C, C++] - C++ friend 클래스와 함수
2018/10/10 - [C, C++] - C++ 클래스 접근제한자
'C, C++' 카테고리의 다른 글
C 변수 선언 및 키워드 (0) | 2018.10.25 |
---|---|
C 표준 입력 함수 scanf (0) | 2018.10.23 |
C 표준 출력 함수 printf() (0) | 2018.10.22 |
C++ 가상 함수(Virtual Function) (8) | 2018.10.19 |
C++ 함수 오버로딩 (0) | 2018.10.11 |
C/C++ 메모리 동적할당 (0) | 2018.10.11 |
C++ friend 클래스와 함수 (1) | 2018.10.10 |
C++ 클래스 접근제한자 (0) | 2018.10.10 |