c++

C++ 개인 필기(11) 클래스의 연산자

Voitcon 2024. 2. 7. 18:30

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개 항이 있는 것은 아님 (단항 연산자)