본문 바로가기

개발/C++

C++ const 키워드

 

const가 붙으면 수정이 안 됨 (되게 만드는 경우도 있지만 그럴 거면 const 붙이지 말자)

 

class ConstClass
{
public:
	ConstClass() {}
	~ConstClass() {}
	void SetValue(int value)
	{
		m_Value = value;
		//m_ConstValue = 0;
	}

	int GetValue() {
		return m_Value;
	}

	const int m_ConstValue = 0;
	int m_Value;
};

class Test
{
public:
	Test() {}
	~Test() {}

	void SetValue(ConstClass& cc) const
	{
		cc.SetValue(1);
	}
};

int main()
{
	Test test;
	ConstClass cc;
	test.SetValue(cc);
	const ConstClass ccc;
	//ccc.GetValue();

	return 0;
}

주석 처리한 건 다 에러 나는 부분

 

기본적으로 const가 붙은 멤버 변수를 수정하려고 하면 에러가 남

 

const ConstClass ccc;

같은 경우는 const로 클래스 객체를 만드는 건데

 

해당 클래스의 일반 메소드들을 호출하면 에러가 남

 

int GetValue() const{
	return m_Value;
}

요런 식으로 메서드 뒤에 const를 붙여줘야 함

 

const를 붙여주면 함수 오버로딩이 되니 같은 이름으로 사용 가능

 

void SetValue(ConstClass& cc) const
{
	cc.SetValue(1);
	cc.m_Value = 2;
}

const 함수 내에서 다른 클래스 멤버를 변경하는 건 상관없음 (const 붙은 멤버는 당연히 안 됨)

 

 

웬만하면 const 붙일만한덴 다 붙이자

 

혼자 공부하면서 에러나서 왜 안 되지 하다가 어이없이 막 붙여놔서 다시 정리할겸 써봄..

'개발 > C++' 카테고리의 다른 글

C++ 퀵 소트 (빠른 정렬) 구현해보기  (0) 2019.06.21
C++ 머지 소트(병합 정렬) 구현해보기  (0) 2019.06.21
C++ shared_ptr 사용할 때 주의할 점  (0) 2019.05.24
컴파일러 최적화  (0) 2019.05.13
C++ 스마트 포인터  (0) 2019.05.07