Programming | 프로그래밍 언어/C++

C언어 기반의 C++ 2

gyunnnnnn 2022. 11. 9. 01:15

const와 포인터

  • const의 의미
// int형 변수 num을 상수화
const int num = 10; 

// 상수만을 가리키는 포인터. 포인터 ptr1을 이용해서 val1의 값을 변경할 수 없다. 
// 가리키는 대상은 변경이 가능하지만(ptr1=&val2;), 가리키는 값은 변경할 수 없다. 
const int * ptr1 = &val;  

// 포인터 ptr2가 상수화 된다. 정수형 변수를 가리키는 상수형 포인터. 
// 포인터가 가리키는 대상은 변경할 수 없고, 가리키는 값은 변경이 가능하다(*ptr2=100;)
int * const ptr2 = &val; 

// 가리키는 대상 및 값의 변경이 불가능하다.
// 포인터 ptr3가 상수화 되었으며, ptr3를 이용해서 val3의 값을 변경할 수 없다.
const int * const ptr3 = & val; 

// 이 함수 내에서는 멤버 변수에 저장된 값을 변경하지 않는다.
// const함수 내에서는 const가 아닌 함수의 호출이 제한된다.
void func(int a) const

참조자(Reference)

  • 참조자는 자신이 참조하는 변수를 대신할 수 있는 또 하나의 이름이다. 변수로 봐도 무리는 없다.
  • 참조자의 수에는 제한이 없으며, 참조자를 대상으로도 참조자를 선언할 수 있다.
  • 변수만 참조가 가능하고 미리 선언이 불가능 하며 NULL로 초기화도 불가능 하다.
  • 참조자를 통해서 포인터 연산 없이 힙 영역에 접근할 수 있다.
// 참조자의 예
int num1=10; 
int &num2 = num1; 
int &num3 = num2; 
int &num3 = num1;

// 포인터 연산 없이 힙 영역에 접근
int * ptr = new int;
int &ref = *ptr;

참조자와 함수

  • 참조자를 이용한 Call-by-reference
void Swap(int &ref1, int &ref2)
{
    int tmp = ref1;
    ref1 = ref2;
    ref2 = tmp;
}

const 참조자

  • const int &ref : 참조자 ref를 이용한 값의 변경은 하지 않겠는 뜻이다.
  • void func(const int &ref) { }
  • 함수 내에서, 참조자를 통한 값의 변경을 진행하지 않을 경우, 참조자를 const로 선언하는것이 좋다.
  • 함수의 원형만 봐도 값의 변경이 이뤄지지 않음을 알 수 있게 한다.

const 참조자의 상수 참조

  • const int &ref = 30;
  • 임시변수라는 것을 만들어 상수 30을 저장하고 참조자가 이를 참조하게 하여 사용할 수 있게 된다.
  • 결과적으론 상수화 된 변수를 참조하는 형태가 된다.
int Adder(const int &num1,const int &num2)
{
    return num1 + num2;
}
  • Adder(3,4)가능 num1=3, num2=4 선언 후 Adder(num1, num2);식으로 호출하지 않고 간단하게 호출이 가능하다.

malloc & free를 대신하는 new & delete

이름 할당 소멸
int형 변수 int * ptr1 = new int; delete ptr1;
길이가 5인 int형 배열 int * arr1 = new int[5]; delete []arr1;
double형 변수 double * ptr2 = new double delete ptr2;
길이가 3인 double형 배열 double * arr2 = new double[3]; delete []arr2;
  • 객체의 생성에서는 반드시 newdelete를 사용해야 한다.

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

복사 생성자  (0) 2022.11.13
생성자, 소멸자, 이니셜라이저, this  (0) 2022.11.11
캡슐화와 const 함수  (0) 2022.11.10
구조체, 클래스, 접근제어지시자  (0) 2022.11.10
C언어 기반의 C++ 1  (0) 2022.11.03