프로그래밍 언어/C & C++ 정리

연산자 오버로딩과 const

뽀또치즈맛 2024. 11. 6. 13:02

 

 

const를 쓰는 이유는?

  • 멤버 변수의 값이 바뀌는 것을 방지하기 위해서
  • 최대한 많은 곳에 const를 붙일 것
  • 지역 변수에 까지도 붙일 것
    • 모든 회사가 이 코딩 표준을 따르지는 않는다.

 

Vectro operater + (const Vector& rhs) const;

 

const &를 사용하는 이유는?

  • 불필요한 개체의 사본이 생기는 것을 방지하기 위해서이다.
  • 멤버 변수가 바뀌는 것 역시 방지하기 위해서이다.

어디에 const를 넣고 안넣고는 곰곰히 생각하면

어디에 const를 넣어야 할 지 알 수 있다.

생각보다 연산자 오버로딩에서 const는 생각보다 잘못쓸 가능성이 있다.

왜냐하면 연산자 오버로딩을 짤 일이 별로 없기 때문이다.

 

잘못 사용하는 코드는 다음 예시와 같다.

// 잘못된 코드의 예시
std::ostream& operator << (const std::ostream& os, const Vector& rhs);

 

 

 

그렇다면 const를 사용하지 않을 때는, 

값이 변해야 할 때 즉, 오브젝트의 상태가 변한다거나 할 때이다.

 

그럼 연산자 오버로딩에 const를 사용하지 않는 경우는?

operator -, operator + 등 과 같이 값이 변하는 것이다.

 

// 반환 값        함수 이름       인자
vector1 = vector1.operator += (vector2)

 

그럼 이런 함수는 다음과 같이 생긴다면 체이닝하기 더 쉬울 것이다.

Vector& operator +=(const Vector& rhs)

 

위와 같은 함수는 다음과 같은 장점이 있다.

 

  • 개체 복사가 없다.
  • 연산자 여럿을 연결해서 쓸 수 있다.
// 연산자 여럿을 연결해서 쓰는 예시

vector1 += vector2 += vector3

 

'프로그래밍 언어 > C & C++ 정리' 카테고리의 다른 글

OOP - 상속  (0) 2024.11.11
연산자 오버로딩을 남용하는 것  (1) 2024.11.10
C++ 함수 오버로딩과 C언어의 _Generic  (4) 2024.11.03
복사 생성자  (4) 2024.11.02
구조체와 클래스의 차이  (1) 2024.11.02