변수를 상수화 시킨다.

즉 변수의 값을 바꾸지 못하게 한다.

 

일반적인 사용법이다.

const int a=10;

a의 값은 변경될수 없다. 포인터로도 변경할수 없다.

 

const int *n;

n이 가리키는 변수의 값을 *n=값 과 같은 형식에 의해서 변경이 불가능한 것을 나타낸다.

n이 가리키는 변수의 변수=값으로는 변경 가능하다.

이를 데이터 상수화라고 한다.

const int &n도 마찬가지 의미이다.(이런 형태는 포인터와 다른 레퍼런스라고 한다)

n이 가리키는 영역의 값을 n을 사용해서는 변경이 불가능하다.

 

int* const n;

전과는 달리 n이 가리키는 변수를 지정할수 없음을 나타낸다, n=&변수가 허용되지 않는다.

따라서 선언과 동시에 초기화 되어야 한다.

이를 포인터 상수라고 한다.

 

const int* const n;

이는 const int *n;과 int* const n;를 합해놓은 것이라고 보면 된다. 즉 n에 의해서는 값을 변경시킬수 없고 n에 새로운 대상을

지정할수도 없다.

 

인이셜라이즈=클래스의 멤버변수가 const로 선언되어있을때

일반 생성자에서 const 선언된 멤버 변수의 값을 할당하는 하는 코드가

지정되면 멤버변수가 const이기 때문에 에러가 발생한다.

이럴때 인이셜라이즈라는 예외적인 문법을 사용하면 const로 생성된

멤버 변수를 초기화 할수 있다.

클래스 내에 const int a 라는 멤버 변수가 있다고 할때

생성자

클래스명(int in) {

 a=in;

} 하게 되면 a가 const로 선언되기 때문에 컴파일시 에러가 발생한다.

이럴때 인이셜라이즈를 사용한다

 

const를 사용수가 많아지면 많아질수록 그 프로그램 더 안정적이다 라고 할수 있다.

클래스명(int in):a(in) {

}

생성자 정의의 a(in)이 인이셜라이즈이다. 이는 a=in을 하라는 소리이다.

이 구분읜 클래스가 메모리 할당후 생성자가 본문 순으로 처리되는대

인이셜라이즈는 메모리 할당, 인이셜라이즈 처리,생성자 본문 순으로 처리되나.

 

클래스에서 멤버 함수를 const화 하면

그 멤버 함수 내에서는 멤버 변수가 const로 선언되어 있지 않았더라고

멤버 변수의 수정은 불가능하다 단지 참조만 가능하다

반환값 함수명() const

와 같이 사용한다.

또한 멤버 함수를 const화 시키면 컴파일 타임에 멤버 변수를 조작할수 있는 가능성이

조금 이라도 있다면 이때도 에러를 발생시킨다.

(이는 해당 const 멤버 함수 내에서 다른 함수 호출시 그 함수가 const 함수인지만 판별한다.

본문 내용이 어떤지는 판별하지 않는다)

 

const int* test()

이 의미는 리턴되는 포인터를 사용한 포인터의 대상의 값은 변경불가이다.

 

const 객체

const 클래스명 객체명;

과 같이 사용하며

이와 같은 개체는

멤버변수가 const로 선언된 것과 같으며

따라서, 멤버변수의 값은 변경 불가능하다.

객체로서 호출할수 있는 함수는

const화 된 멤버 함수만 호출할수 있다.

일반 publi 멤버 함수는 호출 불가하다.

 

함수 오버로딩시에

함수,변수가 Const로 선언되었는지 않되었는지도 포함된다.

'C,C++' 카테고리의 다른 글

힙에 메모리 할당.해제  (0) 2012.08.13
C++에서 레퍼런스  (0) 2012.08.05
메모리  (0) 2012.07.31
iostream과 iostream.h  (0) 2012.07.29
c,c++,c#은  (0) 2012.07.29

+ Recent posts