const 키워드 오버로딩
2019. 8. 24. 20:22ㆍPL/C++
const 키워드는 멤버 변수가 변하지 않는 한에서 const 객체가 사용할 수 있는 함수다. const 키워드가 붙은 함수는 비 const와 const 모두가 사용된다. 하지만 분리하고 싶은 경우가 있는데 이때 const 키워드 오버로딩을 사용하면 된다
#include <iostream>
using namespace std;
class SoSimple {
private:
int num;
public:
SoSimple(int n) : num(n) {}
SoSimple& AddNum(int n) {
num += n;
return *this;
}
void SimpleFunc() {
cout << "SimpleFunc: " << num << '\n';
}
void SimpleFunc() const {
cout << "const SimpleFunc: " << num << '\n';
}
};
void YourFunc(const SoSimple &Func) {
Func.SimpleFunc();
}
int main(void) {
SoSimple s1(3);
const SoSimple s2(7);
s1.SimpleFunc();
s2.SimpleFunc();
YourFunc(s1);
YourFunc(s2);
return 0;
}
혹은 같은 [] 연산인데, 반환값을 다르게 하는 경우가 있다. const 객체는 반환을 반드시 const로 하여 Lvalue를 막으려고 하기 때문이다
int& Array::operator[](int index)
{
cout << "Call non const Func\n";
return pArr_[index];
}
const int& Array::operator[](int index) const
{
cout << "Call const Func\n";
return pArr_[index];
}
위에는 Lvalue를 받아서 Lvalue로 반환하고, 아래는 Rvalue를 Rvalue로 반환을 해준다
'PL > C++' 카테고리의 다른 글
c++ 클래스 상속의 조건 (0) | 2019.08.25 |
---|---|
c++ 클래스 상속 (0) | 2019.08.25 |
복사 생성자 호출 시점 (0) | 2019.08.24 |
c++에서의 struct (0) | 2019.08.24 |
연산자 오버로딩과 관련한 카페 질문 (0) | 2019.08.23 |