+, -, *와 같은 산술 연산자+=, -=와 같은 축약형 연산자>=, ==와 같은 비교 연산자&&, ||와 같은 논리 연산자->, *와 같은 멤버 선택 연산자++, -- 증감 연산자[],()와 같은 배열 연산자와 함수 호출 연산자이러한 기본 연산자들을 직접 사용자가 정의하는 것을 의미
이해하기 쉬운 사이트 : https://cho001.tistory.com/195
(리턴 타입) operator(연산자) (연산자가 받는 인자)
// ==를 오버로딩하고 싶을 때, ==연산자는 언제나 결과 값이 bool이고, 인자로는 ==로 비교하는 것 하나만 받게 되므로 아래와 같이 함수 정의
bool operator==(MyString& str);
Rational operator-();
Rational operator-(const Rational& secondRational) const;
Rational operator<(const Rational& r1, const Rational& r2);
Rational Rational :: operator<(const Rational& r1, const Rational& r2) const;
클래수 내부에서 다른 클래스나 함수들을 friend로 정의할 수 있는데, friend로 정의된 클래스나 함수들은 원래 클래스의 private, protected으로 정의된 함수나 변수에 접근 가능
class A {
private:
void private_func() {}
int private_num;
// B 는 A 의 친구!
friend class B;
// func 은 A 의 친구!
friend void func();
};
class B {
public:
void b() {
A a;
// 비록 private 함수의 필드들이지만 친구이기 때문에 접근 가능하다.
a.private_func();
a.private_num = 2;
}
};
void func() {
A a;
// 비록 private 함수의 필드들이지만 위와 마찬가지로 친구이기 때문에 접근
// 가능하다.
a.private_func();
a.private_num = 2;
}
int main() {}
c++에서는 아래와 같은 4가지 캐스팅을 제공하고 있음
static_cast : 우리가 흔히 생각하는, 언어적 차원에서 지원하는 일반적인 타입 변환const_cast : 객체의 상수성(const) 를 없애는 타입 변환. 쉽게 말해 const int 가 int 로 바뀜dynamic_cast : 파생 클래스 사이에서의 다운 캐스팅 reinterpret_cast : 위험을 감수하고 하는 캐스팅으로 서로 관련이 없는 포인터들 사이의 캐스팅 등. 예를 들어 정수형 -> 포인터로 바꿀 수 있음 (or A를 가리키고 있는 포인터인데 C를 가리키도록 만들고 싶을 때)보통 dynamic_cast를 많이 쓰고, dynamic_cast를 사용하기 힘든 상황에 reinterpret_cast를 사용!
사용법
(원하는 캐스팅 종류)<바꾸려는 타입>(무엇을 바꿀 것인가?)