음악, 삶, 개발
연산자 오버로딩 본문
요약
- 연산자별로 규칙과 주의사항이 틀리니, 다 따로 공부해야한다.
- =, (), [ ], -> 연산자는 반드시 멤버 함수여야한다.
- 멤버 함수일때는 한 개의 인자, 전역 함수일때는 2개의 인자가 필요하다. (3개 이상은 가질수없음)
- + 연산자는 교환법칙이 성립해도록 (예 : myClass + 1 또는 1 + myClass) 멤버 함수, 전역 함수 둘다 정의되어야함. (코드 참조)
- + 연산자는 좌측 피연산자, 우측 피연산자, return type 모두 읽기만 하기때문에 모두 const. 따라서 함수도 () const {}
- + 연산자는 return type은 const, 인자는 const reference
- 연산자 오버로딩 함수 구현시, 생성자를 활용한다.
- 오버로딩 함수의 피연산자중 하나는 반드시 나의 클래스 (사용자정의형) 이여야한다.
- 연산자의 논리적 의미는 가급적 유지하도록 하라. ( 예 - + 인데 * 을 의미하는 함수를 작성하지말라)
- 대입 연산자는 = 의 return type 은 non-const T& 이며, *this 를 return 해야한다.
(이 방식이 표준 라이브러리 type 들의 원칙임으로, 이 규칙을 따르라)
연산자별 방법.
+ 연산자
= (대입) 연산자
C++ Core Guidelines - F.47 : Return T& from assignment operators
class Foo {
public :
Foo& operator=(const Foo& foo) {
// Copy members.
return *this;
}
}
from 구글 스타일 Guide
- 의미가 확실하며, 놀랍지않고 내장형 type 연산자와 동일한 역할을 할때만 연산자를 오버로드하라.
- 사용자 정의 type 에만 연산자를 정의하라.
- 동일한 헤더 파일, 동일한 namespace 안에 정의하라.
- 연산자를 template 으로 정의하지마라.
- 연산자를 정의했다면, 연관되는 연산자를 모두 정의하라. (예 : < 를 오버로드했다면, 모든 비교 연산자를 정의하라)
- 객체를 수정하지않는 이항 연산자는 non-member 함수로 정의하라. ( 이항 연산자란 피연산자가 2개인것. 예를 들어 a + b 의 + )
- 이항 연산자가 클래스 멤버일 경우, 암시적 형변환은 오른쪽 인자에만 적용된다. (a < b 는 컴파일되지만, b < a 는 안되는것)
- 연산자 오버로드를 피하기위해, 다른 방법을 선택하지마라. ( Copy() 대신 = 를, Equal() 대신 == 를, Print() 대신 << 를 정의하라)
- 연산자 &&, ||, ,(comma), &, " " 를 정의하지마라.
- 사용자 정의 리터럴을 사용하지마라.
- 연산자 오버로드에도 적용되는 함수 오버로드 섹션을 숙지하라. (여기 클릭)
참고 링크
Stackoverflow : What are the basic rules and idioms for operator overloading?
C++ Core Guide Lines : Overloading and overloaded operators
C++ Core Guide Lines : Functions
Google, C++ Style Guide : Operator Overloading
C++ 강좌 15편. 연산자 오버로딩(Operator Overloading)
08-C++:연산자 오버로딩
씹어먹는 C++ - <5 - 1. 내가 만든 연산자 - 연산자 오버로딩>
[C++] 14 - this pointer, operator overloading (this 포인터, 연산자 오버로딩)
[C++] Operator Overloading | 연산자 오버로딩
[C++ 강좌] 037 - 연산자 오버로딩 (6) - 특수한 연산자 오버로딩(=, ++, --, [])
C++, 연산자 오버로딩 설명과 사용법!!(교환법칙까지~)
연산자 재정의 (Operator overloading)
[C++ 기본 공부정리] 14-6. OOP - 연산자 오버로딩(operator overloading)
[C++] 연산자 오버로딩(Operator Overloading) 의 두가지 방법
C++ : Chapter - 10 연산자 오버로딩 PART1
C++ : Chapter - 10 연산자 오버로딩 PART2
Operator Overloading (연산자 오버로딩)
C++ string class의 재정의를 통한 연산자 오버로딩 알아보기
C++ 연산자 오버로딩(operator overloading)
[C++] 연산자 오버로딩 - 교환법칙의 성립과 임시객체(Temporary Object)