전문가를 위한 c++ 18장 함수오버로딩

오버로딩 개활
 + , < , * , << 같은 연산기호로 int같은 형을 산술또는 논리연산등을 하는데 이용. 또는 . ->같은 포인터 역참조도 가능하다,[],() 같은 함수호출과 타입캐스팅또한 가능하다. 재정의 가능.

오버로딩을 하는 이유
- 커스텀 클래스를 내장타입처럼 사용하려고 쓰인다.
- 프로그램 동작방식을 더 강력하게 한다.

제약사항
- 이미 지정된 목록의 특수기호만 사용
- . , :: , sizeof , ? : ,같은건 오버로딩 불가.
- 연산자 인자갯수는 바꿀 수 없다. ++ 은 하나, + 는 2, 유일한 삼항연산자 ?:는 3개
- 우선순위와 결합규칙은 바꿀 수 없다.
- 내장타입 연산은 바꿀 수 없다,
- 한개의 기호에 여러기능을 넣을 수도 있다. 예) x = y + x ; x = + y의 +는 2개의 의미

오버로딩시 friend을 많이 사용하며, operator를 사용하여 재정의 가능하다.


- 함수로 오버로딩 해야하는 연산자 : operator =  대입에 의미가 있어서 메서드여야만함.
- 전역함수로 오버로딩해야하는 연산자 : +,-같이 좌우가 서로 교환되는것.
- 메서드 전역함수 어느것으로도 오버로딩가능연산자 : 왠만하면 함수로한다, 그래야 virtual 사용가능 friend로 virtual 사용불가
-메소드로사용시 const를 써주면 객체를 대상으로도 작동한다.

리턴타입선택
비교연산자가 포인터를 리턴하던가 산술이 bollion값을 리턴하는등의 문제가 있을수있음.
내장타입과 같은타입을 리턴시키자 좌향대입이 변경된다면 non-const로 정의
+로 숫자말고도 문자열 붙히기등으로 은유해서 사용가능.

오버로딩 하면 안되는것들(사용 가능해도 혼란을 가져옴)
&, 주소를 못불름
||, && 생략원칙또한 깨진다.
콤마도 연산자인데. 순서를 보장못한다.


우측값 참조 원형
T& operator = (const T&&)


i = -j; // 단항뺄샘
i = -(+j) //단항덧샘후 단항뺄샘

i = i + 1; //증가연산자
i += 1 //사전증가연산자
++i; //전치연산자 값을 다이랙트로 올리고 참조시킨다.
i++; //후치연산자 새로운 임시값을 만들고 대입하고, 참조시킨다.

함축의미
cout >> Panic >> AtThe >> Disco;
operator >>(operator>>(operator>>(cin,Panic ), AtThe ), Disco);


댓글

이 블로그의 인기 게시물

간단하게 언리얼 배터리 콜랙터 정리

GPG 3권 챕터1.2 객체 조합식 게임 프레임웍