조던을좋아하는코린이

열혈 C++ const 본문

카테고리 없음

열혈 C++ const

빠빡형 2022. 1. 21. 16:01

const 객체지향 시간에 변경할 수없다 라는것으로 기억하고 있었다.

열혈 책을 보면서 c언어에서 배운 내용을 잊지말고 기억하자는 의미로 chapter2에서 Const와 관련되 문제가 존재.

 

그렇다면 

What is the const!! in C++

 

*consts

   : 상수화로 위치에 따라 의미가 달라진다.

 

1. const int a =2;

2. int const a = 2;

1번과 2번은 같은 의미를 의미한다. a는 변할 수없는 상수가 된것 그래서 다음 코드에서

   a=3;

과 같은 코드를 입력하면 컴파일 오류가 발생한다.

 

const 변수는 반드시 선언시 초기화가 되어야한다. 안그러면 오류 발생한다.

 

3.따라서 class 에서도 반드시 초기화가 필요

 

class park{

   const int a;

   add( ) 

      : a(2) {             ---> 이 부분아 const int a 를 2로 초기화 해주는것

   }

};

 

class park{

   const int a;

   add(){

      a=2;                ---> 이 부분은 a =2의 의미여서 오류가 발생.

   }

};

 

4. const 포인터 변수

(1)

   int a = 1;

   const int* ptr = &a;   ---> *ptr 을 상수화 포인터 변수가 가리키는 값에 대하여 상수화

   *ptr = 2;                     ---> 오류가 발생

   a = 2;                         ---> Int 로 선언되었기에 Ok

 

(2)

   int a = 1;

   int b = 2;

   int * const ptr = & a;     ---> 포인터 변수 자체를 상수화 , 즉 가리키는 주소를 바꿀 수 없다.

   ptr = &b;                        ---> 불가.

 

(1) + (2)

   int a = 1; 

   const int* const ptr = &a;

 

+++ 추가 +++

const 멤버함수.

int not_allow() const ;             ---> Error

class park

{

   int a = 1;

   int allow() const

{

   int b = 1;

   b++;                                   ---> 지역 변수

 

   a++;                                     ---> Error

   return a;

}

};

const 함수는 해당함수 내에서 모든 멤버 변수를 상수화 시킨다.

그렇기 때문에 함수 내에서 선언된 b는 내부에서 변형이 가능하지만 함수 밖에 선언된 a는 불가능하다.

 

 

 

*Memory space

     Data

     Stack 

      Heap

Malloc & free

 

(1) Data : 전역변수가 저장되는 영역

(2) Stack : 지역변수 및 매개변수가 저장되는 영역

(3) Heap : 프로그램이 실행되느 ㄴ과정에서 동적으로 할당이 이뤄지는 영역, 쉽게 동정할당이 이루어지는 역역이라 생각하면 된다.

(3)Malloc & free : malloc 함수 호출에 의해 할당된 메모리공간은 free 함수 호출을 통해서 소명하지 않으면 해제되지 않는다.

 

*Call by value & Call by reference.