• 연산자 오버로딩

정의 되지않은 데이터끼리의 연산을 직접 정의하여 기호만으로도 그 정의대로 연산이 실행되게 할 수 있다

오버로딩은 다형성의 대표적인 예임

 

예를들어 Vector class가 있다고 생각하면 컴퓨터는 Vector + Vector이 어떻게 연산해야하는지 모른다

그래서 정의를 해주어 그대로 연산되게 하는것

 

 

연산자를 오버로딩 하려면 연산자 함수라는 특별한 함수를 사용한다

operator op ( argument-list )

 

이  op는 연산자 기호를 나타낸다 ( + , - , * , / , [ ])

 

이 연산자 함수는 함수표기와 연산자표기가 모두 가능하다

 

밑은 오버로딩 선언 및 정의이다

여기서 처음 알게된건 arg.x처럼 다른 객체의 private멤버 함수여도

같은 클래스로 생성되었다면 private에 선언된 데이터를 사용가능하다는 것이다

 

그리고 +연산자는 두개의 피연산자를 요구하는데, this 포인터를 통하여 암시적으로 하나가 전달된다.

다른하나는 매개변수로 명시적 전달이 된다.

 

연산자의 왼쪽에 있는 객체가 호출한 객체이고 오른쪽이 매개변수로 전달되는 객체이다

 

세개 이상의 객체의 연속된 연산도 가능하다

덧셈 연산자는 왼쪽에서 오른쪽으로 결합하는 연산자이기에 

a + b 가 실행되고  (a + b의결과) + c 가 실행된다

 

이러한 연산자 오버로딩은 편하지만 기호로만 어떤 기능인지 알수있기때문에

 

정의가 명확해야한다.

 

이건 설계시에도 마찬가지긴 하다


  • 연산자 오버로딩 제약

제한되는 상황이 있는데

 

최소 하나 이상의 피연산자가 사용자 정의 데이터형 이어야한다

[ float - float 같은 모두 표준 데이터형의 연산은 오버로딩 할 수 없다 ]

 

기호를 새로 만들 수 없다

[ operator *+-( ) 처럼ㅋㅋ ]

 

오버로딩 불가능한 기호들이다

 

+ Recent posts