KoreanFoodie's Study
C++ 기초 개념 5-1 : 연산자 오버로딩 (산술, 비교, 대입 연산자) 본문
모두의 코드를 참고하여 핵심 내용을 간추리고 있습니다. 자세한 내용은 모두의 코드의 씹어먹는 C++ 강좌를 참고해 주세요!
MyString의 '==' 연산자 오버로딩
이미 MyString class에서 compare함수를 만들었다면, 연산자 오버로딩은 간단히 구현할 수 있다.
bool MyString::operator==(const MyString& str) {
return !compare(str);
}
대입 연산자 함수
복소수를 구현한 Complex 클래스에서 '=' 연산자 함수를 구현한다고 해 보자.
Complex& Complex::operator=(const Complex& c) {
real = c.real;
img = c.img;
return *this;
}
왜 참조자(Complex &)로 값을 리턴하는 걸까? 왜 Complex 타입이면 안되는 걸까?
예를 들어, a = b = c; 같은 식으로 대입이 이루어진다면, 먼저 b = c 가 실행된 후, 변경된 b의 값이 a로 대입되어야 한다. 하지만 만약 Complex 타입일 경우, 불필요한 복사가 일어난다.
복사 생성자의 경우 디폴트 복사 생성자가 있었듯, 대입 연산자의 경우에도 디폴트 대입 연산자가 존재한다(얕은 복사를 수행).
대입 연산자와 마찬가지로, 사칙 연산 함수들을 구현했다고 가정하고, 대입 사칙연산 함수들(+=, -=, *=, /=)를 구현해 보자.
대입 사칙연산 함수
Complex& Complex::operator+=(const Complex& c) {
*this = *this + c;
return *this;
}
Complex& Complex::operator-=(const Complex& c) {
*this = *this - c;
return *this;
}
Complex& Complex::operator*=(const Complex& c) {
*this = *this * c;
return *this;
}
Complex& Complex::operator/=(const Complex& c) {
*this = *this / c;
return *this;
}
자기 자신을 리턴하는 이항 연산자는 멤버 함수로, 아닌 애들은 외부 함수로 정의하자!
'Tutorials > C++ : Beginner' 카테고리의 다른 글
C++ 기초 개념 5-3 : C++ 캐스팅, 디폴트 인자, 반복자(iterator) (0) | 2021.12.22 |
---|---|
C++ 기초 개념 5-2 : 입출력, 첨자, 타입변환, 증감 연산자 오버로딩 (0) | 2021.12.22 |
C++ 기초 개념 4-6 : explicit과 mutable 키워드 (0) | 2021.12.22 |
C++ 기초 개념 4-5 : 문자열 클래스 (0) | 2021.12.21 |
C++ 기초 개념 4-4 : 생성자 초기화 리스트, static 변수, this 포인터, const 멤버 함수 (0) | 2021.12.20 |
Comments