기본 자료형은 사칙연산이 가능하나,
클래스,구조체 등의 사칙연산이 불가능하다(멤버들에 의한 사칙 연산은 가능)
이른 위해 필요한 것이 연산자 오버로딩이다.
연산자 오버로딩에는
전역 함수에 의한 오버로딩과
멤버 함수에 의한 오버로딩이 있다.
함수명이
operator연산자 로 된 경우
연산자만 사용해서도 호출이 가능하다
이것이 연산자 오버로딩이 된다.
거꾸로 말하면
클라스나 구조체를 연산자를 사용한경우
그 연산자나는
operator연산자 형태로 바뀌며
이것이 전역 함수인지, 멤버 함수인지에 따라 적절히 호출된다.
멤버 함수를 사용하는 경우는
개체1 연산자 개체2 라고 할때
연산자는 개체1에 멤버 함수로 연산자 오버로딩 되어 있다면
개체1의 operator 연산자 함수가 호출되면 개체2가 인수로 전달된다.
전역 함수를 사용하는 경우에는
연산자의 오퍼랜드가 operant연산자에 다 전달된다.
전달되는 개체의 형은의 멤버는 friend로 선언이되어야지
전역 함수에스 전달된 개체의 멤버에 접근 가능하다.
단항 연산자에서 선연산,후연산의 차이(++나 --)
선 연산자는 operator연산자() 형태이며
후 연산자는 operator연사냐(int) 형이라고
약속되어 있다.
여기서 int는 구별하기 위함일뿐 값이 전달되는 것은 아니다.
전연함수로 구현될수 없는 상황이 발생할수 있다.
첫번재 오퍼랜드가 기본 자료형이라면 전역 함수로
연산자 오버로딩이 구현될수 밖에 없다.
cout도 ostream의 연산자 오버로딩이다.
cin은 istream의 연산자 오버로딩이다.
배열도 마찬가지도 [] 연산자 오버로딩이다.
클래스엣 디폴트로 추가되는 함수들
해당 함수가 선언이 되어 있지 않다면
-디폴트 복사생성자
-디폴트 생성자
-디폴트 소멸자
-디폴트 오버로딩된 대입연산자