- 연산자 오버로딩
정의 되지않은 데이터끼리의 연산을 직접 정의하여 기호만으로도 그 정의대로 연산이 실행되게 할 수 있다
오버로딩은 다형성의 대표적인 예임
예를들어 Vector class가 있다고 생각하면 컴퓨터는 Vector + Vector이 어떻게 연산해야하는지 모른다
그래서 정의를 해주어 그대로 연산되게 하는것
연산자를 오버로딩 하려면 연산자 함수라는 특별한 함수를 사용한다
operator op ( argument-list )
이 op는 연산자 기호를 나타낸다 ( + , - , * , / , [ ])
이 연산자 함수는 함수표기와 연산자표기가 모두 가능하다
밑은 오버로딩 선언 및 정의이다
여기서 처음 알게된건 arg.x처럼 다른 객체의 private멤버 함수여도
같은 클래스로 생성되었다면 private에 선언된 데이터를 사용가능하다는 것이다
그리고 +연산자는 두개의 피연산자를 요구하는데, this 포인터를 통하여 암시적으로 하나가 전달된다.
다른하나는 매개변수로 명시적 전달이 된다.
연산자의 왼쪽에 있는 객체가 호출한 객체이고 오른쪽이 매개변수로 전달되는 객체이다
세개 이상의 객체의 연속된 연산도 가능하다
덧셈 연산자는 왼쪽에서 오른쪽으로 결합하는 연산자이기에
a + b 가 실행되고 (a + b의결과) + c 가 실행된다
이러한 연산자 오버로딩은 편하지만 기호로만 어떤 기능인지 알수있기때문에
정의가 명확해야한다.
이건 설계시에도 마찬가지긴 하다
- 연산자 오버로딩 제약
제한되는 상황이 있는데
최소 하나 이상의 피연산자가 사용자 정의 데이터형 이어야한다
[ float - float 같은 모두 표준 데이터형의 연산은 오버로딩 할 수 없다 ]
기호를 새로 만들 수 없다
[ operator *+-( ) 처럼ㅋㅋ ]
오버로딩 불가능한 기호들이다
'C++ > [책] C++ 기초 플러스' 카테고리의 다른 글
[ 763p ~ 790p ] 하나의 매개변수를 취하는 생성자, explicit, 변환 함수, 변환과 프렌드 (0) | 2022.03.24 |
---|---|
[ 727p ~ 762p ] 프렌드 멤버 함수 (0) | 2022.03.23 |
※[ 694p ~ 708p ] 추상화 데이터타입 (0) | 2021.08.28 |
[ 685p ~ 693p ] 객체배열의 초기화, 클래스 사용 범위 상수, enum class (0) | 2021.08.26 |
[ 651p ~ 684p ] 생성자, 디폴트생성자, 파괴자, const멤버함수, this포인터 (0) | 2021.08.24 |