const 키워드 오버로딩

2019. 8. 24. 20:22PL/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