본문으로 바로가기

[TIL] C++ 참조자 / new, delete / class 객체

category etc/C++ 2021. 5. 14. 21:48

 

C ++ 참조자의 도입

#include <iostream>

int main() {
  int a = 3;
  int& another_a = a;

  another_a = 5;
  std::cout << "a : " << a << std::endl;
  std::cout << "another_a : " << another_a << std::endl;

  return 0;
}

C ++ 에서는 다른 변수나 상수를 가리키는 방법으로 포인터와는 다른 새로운 방식을 제공하는데 이를 참조자라고 한다.

 

레퍼런스는 정의 시에 초기화가 되어야 한다. 즉, 반드시 선언할 때 누구의 별명인지 명시를 해야 한다.

 

레퍼런스가 한 변수의 참조자가 된다면, 더 이상 다른 변수를 참조할 수 없다.

 

함수 인자로 레퍼런스를 받아서 함수 내에서 레퍼런스의 값을 바꿀 수 있겠다.

레퍼런스를 리턴하는 함수

 

C++ 의 세계로 오신 것을 환영합니다. (new, delete)

 

new delete 는 C 에서의 malloc 과 free 에 상응한다. 

 

new delete 를 사용한 메모리 관리는 heap 이라는 공간에서 이루어지며 다른 공간에 저장되는 지역 변수들과는 구별된다. 그러므로, new 로 heap 상에 지정된 것이 아닌 것을 delete 하려고 한다면 에러가 발생할 것이다.

 

이 세상은 객체로 이루어져 있다.

#include <iostream>

class Animal {
 private:
  int food;
  int weight;

 public:
  void set_animal(int _food, int _weight) {
    food = _food;
    weight = _weight;
  }
  void increase_food(int inc) {
    food += inc;
    weight += (inc / 3);
  }
  void view_stat() {
    std::cout << "이 동물의 food   : " << food << std::endl;
    std::cout << "이 동물의 weight : " << weight << std::endl;
  }
};  // 세미콜론 잊지 말자!

int main() {
  Animal animal;
  animal.set_animal(100, 50);
  animal.increase_food(30);

  animal.view_stat();
  return 0;
}

변수는 private 으로 설정하여 응용 개발자가 직접적으로 접근할 수 없게 한다. (private 을 명시해주지 않아도 자동적으로 private 으로 설정되긴 한다.)

 

class 내부에서는 private 또한 자유롭게 접근 가능하다.

 

그러한 변수를 의도대로 조정할 수 있기 위해 인스턴스 메소드를 public 으로 설정한다. public 은 명시해주어야 설정되므로 멤버 함수는 public 으로 설정하는 것이 맞을 것이다.

 

 

반응형