오버로딩이란 함수(메소드)명은 같으나 인자나 반환형태가 다른 함수들을 말한다.
연산자 오버로딩이란 연산자를 오버로딩하여 사용하는 것으로
일반적인 경우가 아니더라도 연산자를 사용하여 동작을 수행할 수 있게 해준다.
설명이 어렵긴한데 예제를 보면 좀 이해가 편할듯
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 36 | #pragma once class CNumber { public: CNumber(); ~CNumber(); CNumber operator+(const CNumber & des); CNumber operator+(int des); CNumber operator-(const CNumber & des); CNumber operator-(int des); CNumber operator*(const CNumber & des); CNumber operator*(int des); CNumber operator/(const CNumber & des); CNumber operator/(int des); void operator+=(const CNumber & des); void operator+=(int des); void operator-=(const CNumber & des); void operator-=(int des); void operator*=(const CNumber & des); void operator*=(int des); void operator/=(const CNumber & des); void operator/=(int des); operator int() const { return num; } void set(int n) { num = n; } int get() { return num; } private: int num; }; | cs |
연산자 오버로딩은 operator 뒤에 연산자를 붙여서 함수처럼 새로 만들어 정의하면
숫자가 아닌 string이나 class 등의 연산자 사용을 가능하게 한다.
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 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 | #include "stdafx.h" #include "CNumber.h" CNumber::CNumber() { } CNumber::~CNumber() { } CNumber CNumber::operator+(const CNumber & des) { CNumber result; result.num = this->num + des.num; return result; } CNumber CNumber::operator+(int des) { CNumber result; result.num = this->num + des; return result; } CNumber CNumber::operator-(const CNumber & des) { CNumber result; result.num = this->num - des.num; return result; } CNumber CNumber::operator-(int des) { CNumber result; result.num = this->num - des; return result; } 반복... void CNumber::operator+=(const CNumber & des) { this->num += des.num; } void CNumber::operator+=(int des) { this->num += des; } void CNumber::operator-=(const CNumber & des) { this->num -= des.num; } void CNumber::operator-=(int des) { this->num -= des; } 반복... | 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 | #include "stdafx.h" #include "CNumber.h" #include <iostream> using namespace std; void main() { CNumber a; a.set(50); CNumber b; b.set(25); CNumber c; c = a + b; cout << c.get() << endl; c = a - b; cout << c.get() << endl; c = a * b; cout << c.get() << endl; c = a / b; cout << c.get() << endl; a += a; cout << a.get() << endl; a -= a/2; cout << a.get() << endl; a *= b; cout << a.get() << endl; a /= b; cout << a.get() << endl; } | cs |
연산자 오버로딩을 통하여 이렇게 클래스에서도 연산자를 사용할 수 있게 되었다.
다른 프로그램에서도 사람들이 만들어둔 수많은 함수들이 연산자 오버로딩을 통해 연산자의 사용이 가능한 것이다.
'프로그래밍 공부 > C++' 카테고리의 다른 글
상속, 오버라이딩 (0) | 2018.03.21 |
---|---|
문자열 연결 및 비교(연산자 오버로딩 예제) (0) | 2018.03.21 |
클래스 사용예제 (0) | 2018.03.21 |
객체지향, 클래스 (0) | 2018.03.21 |
동물 스무고개(?) (Tree연습 예제) (0) | 2018.03.21 |