본문 바로가기

개발/C&C++

(C/C++ 속성 정리) 25일 차 : Const 한정자란?

안녕하세요 넬다이입니다.

오늘은 Const 한정자에 대해서 알아보는 시간을 가져보겠습니다.

 

const 한정자(제한자) 
const는 예약어입니다. 예약어는 c++에서 변수명이나 함수명으로 사용할 수 없습니다.
기호 상수를 초기화할 수 있수 없으며 상수의 값을 변경하는 것 또한 안된다.

 

예로 불가한 코드를 보여드리겠습니다.

const int Student = 10; 
Student = 20;


const 가 붙으면 상수 화가 이루어지기 때문에 한 번 초기화된 값으로 고정이 되고 절대 변경할 수 없다.

class CTest
{
private:
	const int	m_iTest;
public:
	
	void	Render(void)
	{
		cout << "Render Called" << endl;
	}

	void	Render(void) const
	{
		cout << "Render const Called" << endl;
	}

public:
	CTest(void)
	: m_iTest(20)
	{
	}
	~CTest(void){;}
};
void main(void)
{
}

보통 멤버 변수를 초기화하고 싶다면 생성자에서 초기화하면 된다.

위 CTest에 보시면은 m_iTest의 초기화 구문입니다.

하지만 const 인 멤버를 초기화하려면 어떻게 해야 할까?
생성자가 호출되는 시점은 이미 멤버 변수의 공간이 할당된 시점이며 const 멤버는 선언과 동시에 초기화가 되어야 한다.

const 객체
const 객체 생성을 하면 초기화하는 값이 변하지 않는다 상수 특성을 가진 것임으로 조작 유무에 따라 에러가 발생하기도 한다.

또 한 CTest안에 코드를 더 넣어본다면은

class CTest
{
private:
	int	m_iTest2;
	const int	m_iTest;
public:
	
	void	Render(void)
	{
		cout << "Render Called" << endl;
	}

	void	Render(void) const
	{
		cout << "Render const Called" << endl;
	}

	/*int*	GetTest(void) const
	{
		return &m_iTest;
	}*/


	/*void	Render(void) const
	{
		m_iTest2 = 40;
	}*/

public:
	CTest(void)
		: m_iTest(20)
	{
	}
	~CTest(void){;}
};

int* GetTest(void) const 함수는 외부에서 포인터를 통해 참조하여 수정 가능성이 있기 때문에 에러가 발생합니다.

 

void Render(void) const 함수에서는 const멤버 함수라 부르며 함수 내부에서 클래스 멤버 변수의 값을 변경하고자 한다면은 오류가 발생합니다. 값 변경을 허용하지 않기 위해 사용을 합니다.

 

[개발/C&C++] - (C/C++ 속성 정리) 24일 차 : 객체지향 프로그래밍이란?

[개발/C&C++] - (C/C++ 속성 정리) 23일 차 : 분활컴파일 및

[개발/C&C++] - (C/C++ 속성 정리) 22일 차 : 함수포인터를 이용한 사칙연산 계산기 만들기

[개발/C&C++] - (C/C++ 속성 정리) 21일 차 : 함수포인터

[개발/C&C++] - (C/C++ 속성 정리) 20일 차 : 레퍼런스 변수의 사용

[개발/C&C++] - (C/C++ 속성 정리) 19일 차 : 재귀 함수 및 2차원 배열