Class Position 이 있을때
Position pos3 = pos1 + pos2 -> 어떻게 해야할까?
연산자 vs 함수
-> 연산자는 피연산자의 개수/타입 고정
연산자 오버로딩 이란?
우리만의 클래스에 pos1+pos2 와 같은 연산자를 지원하게 만들고 싶을때 사용
1. 연산자 함수 정의
->함수도 멤버함수와 전역함수가 있는 것처럼 연산자 함수도 2가지 방식 존재
pos1+pos2 만들기
Postion operator+()
{
Position pos , x=x1+x2, y=y1+y2, return pos;}
pos3= pos1+pos2 == pos3=pos.operator+(pos2)
멤버 연산자 함수
a op b 형태에서 왼쪽을 기준으로 실행 (a가 클래스여야 가능 , a 를 기준 피연산자라함)
a가 클래스가 아니면 사용이 불가능하다.
Position operator+(int a) -> pos4=pos3+1 (가능)
pos4=1+pos3 (불가능)
전역 연산자 함수
a op b 형태 -> a,b 모두 연산자 함수의 피연산자로 만듬
Position operator+(int a, const position& b)
{ Position ret , +연산 return ret -> Position Pos4=1+pos3 (가능)
멤버, 전역 더 좋은것은 없다.
멤버함수 연산자만 지원하는 기능 -> 대표적으로 대입 연산자(전역 불가능)
대입 연산자는 주로 자기 자신의 참조 값을 같는다.
Position& operator=(int a)
{ x=arg, y=arg return *this ->주소의 값을 알수 있다.
복사 대입 연산자
대입 연산자중 자기 자신의 타입을 인자로 받음
Position& operator=(const Position& a)->const 는 웬만하면 추가 -> 임시객체를 참조하지 못하는 현상 때문이다.
->해당 객체가 복사되길 원하는 특징으로 복사, 생성, 대입이 특별하다.
모든 연산자는 다 오버로딩이 불가능
모든 연산자가 다 2개 항이 있는 것은 아님 (단항 연산자)
'c++' 카테고리의 다른 글
C++ 개인 필기(13) 동적 할당 (0) | 2024.02.14 |
---|---|
C++ 개인 필기(12) static (1) | 2024.02.13 |
C++ 개인 필기(10) 초기화 리스트 (0) | 2024.02.06 |
C++ 개인 필기(9) 은닉성 다형성 (0) | 2024.02.01 |
C++ 개인 필기(8) 객체지향 생성자 (0) | 2024.01.31 |