C++ 노트 - 연산자 오버로딩

중복 정의 불가능 연산자

멤버 선택자 ( . )
멤버 객체 선택자 ( .* )
범위 지정 연산자 ( :: )
조건 연산자 ( ?: )
sizeof 연산자

중복 가능하지만 헷갈릴 수 있는 연산자

operator&
operator&&
operator||
operator

중복 정의한 모든 연산자는 파생 클래스로 상속된다.( = 연산자 제외 )

오버로딩의 제약사항

항 중 하나는 반드시 내가 만든 데이터형이어야 한다.
2항 연산자 -> 2항 연산자 , 1항 연산자 -> 1항 연산자
1항 연산자 -!> 2항 연산자, 2항 연산자 -!> 1항 연산자
연산자 우선순위오 결합순위는 바꿀 수 없다.
연산자 기호를 새로 만들 수 없다.

다음과 같은 함수로 만든다.
(데이터 타입) operator연산자 (매개변수);

a (연산자) b -> d.operator연산자(b) 와 같은 식으로 해석된다.

단항 연산자 : 형태가 거의 정해져 있다.

전위 연산자
!op, ~op, ++op, --op

Type& operator++(); -> 변한 뒤 값을 반환하기 때문에 &
의 형태

후위 연산자
op++, op--

Type operator++(int); -> 변하기 전의 값을 복사했다가 반환

매개변수 int는 의미없는 매개변수 -> 전위 연산자와 구별을 위해

2항 연산자에서 앞에 다른 데이터형이 오는 경우

앞의 데이터를 첫 번째 인자로 받는 operator를 만들어야 한다. -> 전역으로 선언

Type operator연산자 ( (앞의 데이터형) op1, Type op2 )

전역 함수에서 Type(내가 만든 객체)의 멤버 변수를 쓸 수 있게 하기 위해 -> 프렌드 선언

타입 변환 연산자

operator Type();

객체를 원하는 Type으로 변환해주는 함수를 만들 수 있다.
객체 내부에 선언.

댓글

이 블로그의 인기 게시물

HTML - input file 버튼 꾸미기

HTML - 이미지 미리보기(jQuery 없이)

BOJ - DNA 유사도(2612)