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 복사생성자, 소멸자
아래 블로그에서 많은 도움을 받았습니다.
감사합니다.
'C & C++ > C++' 카테고리의 다른 글
[C++] c++ 헷갈리는 개념 간단 정리(3) (0) | 2022.11.11 |
---|---|
[C++] C++ RapidJSON 라이브러리 사용법 (0) | 2022.11.10 |
[C++] C++ select api와 inet_ntop api 정리 (0) | 2022.11.10 |
[C++] C++ listen api 의 parameter 중 backlog. (0) | 2022.11.10 |
[C++] C++ 헷갈리는 개념 간단 정리 (2) (0) | 2022.11.09 |