본문 바로가기

프로그래밍/C++

const와 static

const

 : 변수를 상수값으로 만드는 용도, 객체의 데이터 변경을 허용하지 않게 하고 싶을 때 사용한다.

 

 

클래스 멤버함수는 함수 선언 끝에 const를 붙일 수 있다.

const를 붙이게 되면 이 함수 안에선느 멤버변수의 값을 변경할 수 없다.

이 클래스를 이용해서 생성한 객체가 const로 생성이 되면 일반 멤버함수는 호출이 불가능하다.

함수 뒤에 const가 붙은 멤버함수만 호출이 가능하다.

 

ex)

int GetVariable() const
{
	return iVariable;
}

 

const의 사용 예시

 

1.

const int iNum = 10;

-> 변수 num을 상수화한다.

 

2.

const int * ptr1 = &val1;

-> 포인터 ptr1을 이용해서 vall의 값을 변경할 수 없다.

 

3.

int * const ptr2 = &val2;

-> 포인터 ptr2가 상수화 된다.

 

4.

const int * const ptr3 = &val3;

-> 포인터 ptr3가 상수화 되었으며, ptr3을 이용해서 val3의 값을 변경할 수 없다.

 

static

 1. 전역변수에 선언된 static의 의미

  -> 선언된 파일 내에서만 참조를 허용한다.

 

 2. 함수 내에 선언된 static의 의미

  -> 한번만 초기화되고, 지역변수와 달리 함수를 빠져나가도 소멸되지 않는다.

 

클래스의 멤버변수나 멤버함수는 static으로 선언이 가능하다.

static 멤버변수는 딱 1개의 메모리 공간이 만들어지게 된다.

객체를 아무리 많이 만들더라도 무조건 1개의 공간이 생성된다.

각각의 객체에서 접근을 하더라도 같은 공간을 공유하여 사용하게 되고 클래스 차원에서의 접근도 가능하다.

 

static 멤버변수는 클래스 외부에 사용하겠다라는 선언이 있어야 한다.

 

일반 멤버함수와 static 멤버함수의 차이

 : 일반 멤버함수는 반드시 호출하는 객체를 이용하여 호출을 해주어야 한다.

  하지만 static 멤버함수는 클래스차원에서의 호출도 가능하다. 객체를 이용해서도 가능하다.

  단, this가 없다.

 

static 멤버함수에서 일반 멤버함수에 접근할 경우 static 멤버함수는 this가 없기 때문에 접근이 불가능하다.

static 멤버함수에서는 지역변수를 선언하여 사용하던가 static 멤버변수를 사용할 수 있다.

'프로그래밍 > C++' 카테고리의 다른 글

함수 포인터  (0) 2019.06.12
template  (0) 2019.06.09
복사생성자  (0) 2019.06.03
Reference (참조자)  (0) 2019.06.01
while과 do while, #define과 inline  (0) 2019.05.31