음악, 삶, 개발

연산자 오버로딩 본문

개발 공부/C++ 약점공략

연산자 오버로딩

Lee_____ 2020. 9. 14. 08:44

요약

 

- 연산자별로 규칙과 주의사항이 틀리니, 다 따로 공부해야한다.

- =, (), [ ], -> 연산자는 반드시 멤버 함수여야한다.

- 멤버 함수일때는 한 개의 인자, 전역 함수일때는 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++] 연산자 오버로딩

씹어먹는 C++ - <5 - 1. 내가 만든 연산자 - 연산자 오버로딩>

[C++] 14 - this pointer, operator overloading (this 포인터, 연산자 오버로딩)

[C++] 연산자 오버로딩(Overloading)

[C++] 연산자 오버로딩 개념, 형태

TCP School : 연산자 오버로딩

[C++] 연산자 오버로딩의 종류와 특징

C++ operate연산자 오버라이딩.md!

[C++] Operator Overloading | 연산자 오버로딩

연산자 오버로딩 총정리

대입연산자오버로딩 주의할점(소스)

[C++ 강좌] 037 - 연산자 오버로딩 (6) - 특수한 연산자 오버로딩(=, ++, --, [])

C++ 연산자 오버로딩

C++, 연산자 오버로딩 설명과 사용법!!(교환법칙까지~)

연산자 재정의 (Operator overloading)

[C++ 기본 공부정리] 14-6. OOP - 연산자 오버로딩(operator overloading)

[C++] 연산자 오버로딩(Operator Overloading) 의 두가지 방법

C++ : Chapter - 10 연산자 오버로딩 PART1

C++ : Chapter - 10 연산자 오버로딩 PART2

[C++] 배열 인덱스 연산자 오버로딩 []

[C++] 연산자 오버로딩과 프렌드

연산자 오버로딩 C++

Operator Overloading (연산자 오버로딩)

Microsoft Docs : 연산자 오버로드

C++ - 연산자 오버로딩 (1/3)

C++ - 연산자 오버로딩 (2/3)

C++ - 연산자 오버로딩 (3/3)

[C++] 연산자 오버로딩 정리와 예제...

C++ string class의 재정의를 통한 연산자 오버로딩 알아보기

C++ 연산자 오버로딩(operator overloading)

[C++] 연산자 오버로딩 - 교환법칙의 성립과 임시객체(Temporary Object)

[C++] 연산자 오버로딩의 교환 법칙

이항연산자 오버로딩의 교환법칙