본문 바로가기

정보정보

Const 변수 - cpp



const 란!
const는 변수의 선언 앞에 붙어서 변수를 상수화 한다.

1. const가 변수 앞에 붙었을 때

const double PI = 3.14;   // 이후 PI 에 대한 값은 변경 불가능!

PI = 2.3 ;// Error!




2. const 가 포인터 자료형 앞에 붙었을 때

 

int gorp = 16;

int chips = 12;

 

const int* p_snack = &gorp;

 

*p_snack = 20; ///< 사용불가, p_snack가 지시하는 값은 변경할 수 없다.

p_snack = &chips; ///< 사용가능, p_snack는 다른 변수를 지시할 수 있다.

 

< const 가 포인터 자료형 뒤에 붙었을 때 >

 

int gorp = 16;

int chips = 12;

 

int* const p_snack = &gorp;

 

*p_snack = 20; ///< 사용가능, p_snack를 사용하여 값을 변경할 수 있다.

p_snack = &chips; ///< 사용불가, p_snack 가 지시하는 변수를 변경할 수 없다.

 

< const 가 일반 자료형 앞에 붙었을 때 >

 

const int gorp = 16;

 

int* p_snack = &gorp;

 ///< 사용불가. const로 선언된 일반 자료형 변수의 주소는 일반 포인터변수에 대입 불가.

 

< const 가 일반 자료형 앞과 포인터 자료형 앞에 붙었을 때 >

 

const int gorp = 16;

 

const int* p_snack = &gorp;

///< 사용가능. const로 선언된 일반 자료형 변수의 주소는 앞 const 포인터변수에 대입 가능.

///< const 가 포인터 자료형 앞에 붙었을때 와 같은 내용.

 

< const 가 일반 자료형 앞과 포인터 자료형 뒤에 붙었을 때 >

 

const int gorp = 16;

 

int* const p_snack = &gorp;

///< 사용불가. const로 선언된 일반 자료형 변수의 주소는 뒤 const 포인터변수에 대입 불가.

///< const 가 포인터 자료형 뒤에 붙었을때 와 같은 내용.

const 가 포인터 자료형 앞에 붙으면 "포인터 변수가 가르키고 있는 값" 을 변경 불가로 만드는 것.

 

const 가 포인터 자료형 뒤에 붙으면 "포인터 변수(주소)" 를 변경 불가로 만드는 것.

 

데이터 형 자체가 포인터가 아니라면, const 데이터의 주소이든 const가 아닌 데이터의 주소이든 모두 const를 지시하는 포인터를 대입할 수 있으나, const가 아닌 포인터에는 const가 아닌 데이터의 주소만 대입할 수 있다.

 

const를 사용하는 함수는 const와 const가 아닌 전달 인자를 모두 처리 할 수 있지만, 함수 원형에서 const를 생략한 함수는 const가 아닌 데이터만 처리할 수 있다.



 3. Class 에서 const 사용하기 

 학생 class 를 설계하는 경우, 학생의 id는 한번 사용되고 변하지 않을 값이라면.
class student
{
       const int id;
       int age;
       char name[20];
       char major[20];
     private:
      student(int _id,int _age,char* name,char* _major):id(id)
      {
             age = _age;
             strcpy(name,_name);
             strcpy(major,_major);
      }
}

student(int _id,int _age,char* name,char* _major):id(id)
설명:
이는 다음과 같은 의미를 지닌다.
'멤버 함수 id를 매개변수 _id로 초기화 하라'
그래서 이름도 이니셜라이져이다.
이니셜라이져는 생성자의 몸체 부분보다 먼저 실행된다는 특징도 지니고,
cosnt 멤버변수를 초기화 할수 있다는 특징도 지닌다.

그래서 const 는 반드시 이 이니셜라이져를 이용해서 초기 화 해야 한다.

이후 사용
우리가 변수를 선언할 때 const 키워드를 붙여서 변수를 상수화 하듯이
객체도 생성과 동시에 상수화하는 것이 가능하다.


// const 된 함수호출
:const 된 변수를 다루기 위해서는, const 된 함수(함수내에서 변경 가능성이 없도록 const 옵션을 줘야..)
한다.
다음 이시간에는...const 변수를 다루기 위한 const 옵션 함수를! 공부해보도록 하자!

From.아래 블로그 & 열혈강의 cpp

=====================================================================

리플 없는 불펌 "환영" 합니다. 단 아래 줄 만은 지우지 마세요.

잘못된 내용 지적해 주세요. 내용 추가도 환영합니다.

http://blog.naver.com/angelkkm80 ===> 안부게시판 혹은 해당 내용 리플.

메일로도 받습니다.

angelkkm80(골뱅)naver.com

반드시 연락주세요. 저도 잘못된건 고쳐야져... -_- ;;;

=====================================================================