const를 사용하는 이유
- 멤버 변수의 값이 바뀌는 것을 방지한다.
- 객체가 상수화되어 있으면 해당 객체의 멤버 변수를 변경할 수 없으므로 안전성을 제공한다.
- 최대한 많은 곳에 const를 붙여야 한다.
- 코드를 읽는 사람에게 해당 변수나 함수의 의도를 명확히 전달하고, 컴파일러에게 잠재적인 오류를 찾아내도록 돕는다.
- Local 변수에도 그렇게 해야한다.
- 함수 내에서 값이 변경되지 않는 변수에 const를 사용하면 함수의 의도를 명확히 하고, 컴파일러가 불필요한 변경을 방지할 수 있다.
Vector를 더하는 a + b의 경우
Vector operator+(const Vector& rhs) const;
- a와 b
Vector
는 더하려는 값일 뿐 변해서는 안된다.
연산자 오버로딩과 const
Vector operator+(const Vector& rhs) const;
- const &를 사용하는 이유:
- 불필요한 개체의 사본이 생기는 것을 방지하며, 멤버 변수의 변경을 방지한다.
std::ostream& operator<<(const std::ostream& os, const Vector& rhs);
- 에러:
const &
를 사용하게 되면os
에 출력을 할 수 없게 된다. 제대로된 표현은 아래와 같다.
std::ostream& operator<<(std::ostream& os, const Vector& rhs);
연산자 오버로딩에 const를 사용하지 않는 경우
vector1 += vector2;
vector1 = vector1.operator + (vector2); // 위와 같다.
Vector operator+=(const Vector& rhs); // [ const가 들어가야 하는가? ]
- 대입 연산자는 본인의 값에 대한 멤버 변수의 변환이 일어나야 하기 때문에 const를 붙이지 않는다.
더 나은 방법:
Vector& operator+=(const Vector& rhs);
- 개체 복사가 일어나지 않음
- 아래와 같이 연산자를 연결해서 사용할 수 있다.
vector1 += vector2 += vector3;
연산자 오버로딩의 제한사항
- 오버로딩된 연산자는 최소한 하나의 사용자 정의 형을 가져야 한다.
Vector operator+(const Vector& rhs) const;
- 오버로딩된 연산자는 피연산자 수를 동일하게 유지해야 한다.
Vector vector1;
+vector1; // 불가능하다. + 연산자는 2개의 피연산자를 가진다.
// 단항 + 연산자를 오버로딩할 수는 있다.
- 새로운 연산자 부호를 만들 수 없다.
- 오버로딩할 수 없는 연산자가 있다.
'Language > C++' 카테고리의 다른 글
[C++] 19.Unmanaged Programming: 다형성(Polymorphism) (0) | 2024.01.30 |
---|---|
[C++] 18.Unmanaged Programming: 상속(Inheritance) (0) | 2024.01.30 |
[C++] 16.Unmanaged Programming: Friend 키워드 (0) | 2024.01.29 |
[C++] 15.Unmanaged Programming: 연산자 오버로딩 (0) | 2024.01.25 |
[C++] 14.Unmanaged Programming: 함수 오버로딩 (0) | 2024.01.25 |