언어 공부/C++
6. 오버로딩(Overloading)
LTSGOD
2023. 1. 14. 11:31
함수 오버로딩
- 함수의 이름은 동일
- 매개변수의 type, 갯수가 다름
- return type은 관계없음
연산자 오버로딩
- C++ 은 다양한 연산자 오버로딩 가능
- >>, << 구현의 경우 friend 키워드를 통해 구현 가능(멤버함수로 불가)
friend
- 다른 클래스나 함수가 나의 private 또는 protected 멤버에 접근할 수 있게 허용
//<<, >>멤버함수 불가, 외부함수에만 구현 가능, 항상 참조변수써야함
class Complex {
private:
double re, im;
public:
Complex(double r) { re = r; im = 0; }
Complex(double r = 0, double i = 0) : re(r), im(i){}
void Output() { cout << re << " + " << im << "i" << endl; }
Complex& operator+=(Complex);
Complex& operator-();
friend Complex operator+(Complex& v1, Complex& v2);
friend Complex operator++(Complex& v1);//전위 연산자
friend Complex operator++(Complex& v1, int x);//후위 연산자
friend ostream& operator<<(ostream& os, Complex& v1);
friend istream& operator>>(istream& is, Complex& v1);
};
Complex& Complex::operator+=(Complex v) {
this->re += v.re;
this->im += v.im;
return *this;
}
Complex& Complex::operator-() {
this->re = -re;
this->im = -im;
return *this;
}
Complex operator+(Complex& v1, Complex& v2) {
Complex tmp;
tmp.re = v1.re + v2.re;
tmp.im = v1.im + v2.im;
return tmp;
}
Complex operator++(Complex& v1) {
return Complex(++v1.re, ++v1.im);
}
Complex operator++(Complex& v1, int x) {
Complex tmp = v1;
v1.re++;
v1.im++;
return tmp;
}
ostream& operator<<(ostream& os, Complex& v1) {
os << "(" << v1.re << " + " << v1.im << "i)" << endl;
return os;
}
istream& operator>>(istream& is, Complex& v1) {
is >> v1.re >> v1.im;
return is;
}