C & C++/C++

[C++] C++ 기초 개념 정리

Razelo 2022. 11. 13. 11:50

1. 레퍼런스 = 참조자

레퍼런스는 반드시 처음에 누구의 별명이 될 것인지 지정해야 한다. 

int& another_a; 이렇게 하는건 불가능함. 

 

반면에 포인터는 int* p; 이렇게 하는게 가능함. 

또한 레퍼런스는 한 번 별명이 되면 절대로 다른 이의 별명이 될 수 없다. 

 

또한 레퍼런스는 메모리 상에 존재하지 않을 수도 있다. 

진짜 그냥 별명이라고 생각하면 된다. 

왜 포인터 대신 참조자를 사용할까? 불필요하게 *나 &를 많이 쓸 필요가 없기 때문이다. 

 

레퍼런스는 있는데 원래 참조하던 것이 사라진 것을 댕글링 레퍼런스라고 한다. 

그러니 지역 변수의 레퍼런스를 리턴하지 않도록 주의하자. 

 

레퍼런스를 리턴하는 장점?

레퍼런스가 참조하는 타입의 크기와 상관 없이 딱 한 번의 주소값 복사로

전달이 끝나게 됨. 

 

하지만 예외적으로 상수 레퍼런스로 리턴값을 받게 되면 해당 리턴값의 생명이 연장된다 

const int& a = f(); 

이런 식으로 말이다. 

 

2. new와 delete 

T* pointer = new T; 

*pointer = 10; 

delete pointer; 

와 같이 사용한다. 

 

new[] 로 만들었으면 delete[] 로 지워준다. 

 

3. 객체지향프로그래밍 

 

 

#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 으로 처리한다. 

 

4-2 함수의 오버로딩, 생성자 

c++ 에서는 컴파일러가 알아서 적합한 인자를 가지는 함수를 찾아서호출해줌. 

 

디폴트 생성자는인자를 하나도 가지지 않는 생성자다. 사용자가 어떤 생성자도 명시적으로 정의하지않으면

컴파일러가 자동으로 추가해주는 생성자임. 

 

4-3  복사생성자, 소멸자 

 

 

 


 

아래 블로그에서 많은 도움을 받았습니다.

 

감사합니다. 

 

https://modoocode.com/141

 

씹어먹는 C++ - <2. C++ 참조자(레퍼런스)의 도입>

 

modoocode.com

 

반응형