320x100
연산자 중복이란 무엇인가?
연산자 중복은 C++ 에서 제공하는 기본적인 자료형들(예를 들어 int, double, float)말고 다른 클래스에도 연산자를 이용할 수 있도록 하는 문법이다.
string 클래스도 이미 연산자 중복이 적용되어 있다.
string은 + 연산자를 통해 s1과 s2를 이어붙이는 역할을 한다.
어떻게 작동하는가?
만약 내가 어떤 객체 v1, v2에 대해 v1 + v2라고 쓴다면, 컴파일러는 이를 v1.operator+(v2) 의 형태로 호출하여 반환값을 반환한다.
어떤 연산자에 대해 작동하는가?
+,-,++(전위, 후위),--(전위, 후위),=,==,[],* 등등 다양한 연산자를 오버로딩하여 사용할 수 있다.
예시)
#include <iostream>
#include <string>
using namespace std;
class Complex
{
double r;
double i;
public:
Complex(double r,double i)
{
this->r = r;
this->i = i;
}
Complex operator+(Complex &complex)
{
double r, i;
r = this->r + complex.r;
i = this->i + complex.i;
Complex result(r, i);
return result;
}
Complex& operator++()
{
++r;
++i;
return *this;
}
Complex operator++(int k)
{
Complex temp = { *this };
(this->r)++;
(this->i)++;
return temp;
}
Complex& operator=(Complex &complex)
{
this->r = complex.r;
this->i = complex.i;
return *this;
}
bool operator==(Complex &complex)
{
if (this->r == complex.r &&
this->i == complex.i)
{
return true;
}
else return false;
}
friend ostream& operator<<(ostream& os, const Complex& complex)
{
os << "(" << complex.r << " + " << complex.i << "i)";
return os;
}
};
int main()
{
Complex c1(2.1, 4.5);
Complex c2(1.5, 3.8);
// 대입 연산자 =
Complex c3 = c1 + c2;
// << 연산자
cout << c3 << endl;
Complex c4(3.6, 8.3);
// 비교 연산자 ==
if(c3==c4)
{
cout << "c3 과 c4는 같은 값임\n";
}
// 전위 ++
cout << ++c3 << endl;
// 후위 ++
cout << c3++ << endl;
cout << c3;
}
간단하게 복소수를 나타내는 Complex를 만들어 테스트해 보았다.
복소수의 실수부와 허수부가 각각 r과 i에 저장된다.
다른 것은 특별할게 없고 << 연산자의 중복이 좀 특이한데 friend 키워드로 ostream에 접근해주면 된다.
'Study > C++' 카테고리의 다른 글
[C++]예외처리(Exception Handling) (0) | 2020.12.16 |
---|---|
[C++]복사 생성자(Copy Constructor) (0) | 2020.12.15 |
[C++]업캐스팅과 가상함수, 순수가상함수 (0) | 2020.12.13 |
[C++]STL Vector 자주 쓰는 기초적인 코드들 (0) | 2020.12.12 |
[C++,MFC]MFC 프로그래밍이란 무엇인가? + 기본 컨트롤러 (7) | 2020.11.24 |
댓글