연산자 오버로딩
- 다음 연산자에 대해 사용자가 재정의하여 사용할 수 있다.
- 산술 연산자 :
+
,-
,*
- 약형 연산자 :
+=
,-=
- 비교 연산자 :
>=
,==
- 논리 연산자 :
&&
,||
- 멤버 선택 연산자 :
->
,*
- 증감 연산자 :
++
,--
- 기타
- 배열 연산자 :
[]
- 함수 호출 연산자 :
()
- 배열 연산자 :
- 산술 연산자 :
방법
1
(리턴 타입) operator(연산자) (연산자가 받는 인자)
예시
1
bool operator==(MyString& str);
- 사칙연산의 경우 레퍼런스가 아닌 값을 리턴해야함.
friend 키워드
- 개념
friend
키워드로 정의한 클래스나 함수는 기존 클래스의 private 변수나 함수에 접근이 가능.- 일반적으로는 private으로 정의된 멤버는 해당 객체의 public 멤버 함수를 통해서만 접근이 가능
- 특징
- 지정한 대상에 한해 해당 객체의 모든 멤버에 접근할 수 있는 권한을 부여함.
- 이항 연산자를 오버로딩할 때 주로 사용됨.
선언 방법
1
friend 클래스이름 함수이름(매개변수목록);
Wrapper 클래스
- 기본 자료형(
int, float
등)을 클래스로 포장해서 각각의 자료형을 객체로 사용하는 것 타입 변환 연산자 정의 방법
1
operator (변환 하고자 하는 타입) ()
사용 예시
1
operator int()
C++ 타입 변환 (type conversion)
타입 변환의 종류
static_cast
: 일반적인 변환const_cast
: 객체의 상수성(const)을 없애는 변환dynamic_cast
: 파생 클래스 사이에서의 다운 캐스팅- 업캐스팅 vs 다운캐스팅?
- 업캐스팅(upcasting)
- 자식 클래스가 부모 클래스 타입으로 캐스팅
- 캐스팅 연산자 괄호 생략 가능
- 자식 클래스에서만 있는 속성과 메서드는 사용 불가능
- 다운캐스팅(downcasting)
- 부모 클래스가 자식 클래스 타입으로 캐스팅
- 캐스팅 연산자 괄호 생략 불가능
- 업캐스팅한 객체를 다시 자식 클래스 타입의 객체로 되돌리 위해 사용함.
- 업캐스팅(upcasting)
- 업캐스팅 vs 다운캐스팅?
reinterpret_cast
: 서로 관련이 없는 포인터들 사이의 변환
방법
(원하는 캐스팅 종류)<바꾸려는 새로운 타입>(바꿀 대상)
예시
static_cast<int>(float_variable);
static_cast
를 통해float
타입의float_variable
변수를int
로 변환