프로그래밍 공부에 대한 이야기
- 보통 공부의 경우 이해를 하고 문제를 풀면서 연습한다
- 코딩의 경우 이해가 안될 경우 조금씩 실습하면서 이해하는 과정이 필요하다.
- 이해하는 과정을 겪고 다시 보면 이해가 됨
숙제에 관한 이야기
- 이제 숙제 기존 4개에서 2개씩 올라감
- 숙제의 난이도도 올라가고 수업 내용을 따라가는 것도 어려워졌으므로.
링크드리스트 숙제
- 노드 삽입 로직에 리스트가 비어있을 때와 마지막 요소에 집어넣을 때 에러 발생
- 그 에러를 처리할 수 있도록 로직 구현
클래스에 대한 내용
- 링크드리스트를 구조체로 짜보니 불편한 점이 있다.
- 링크드리스트 노드 삽입, 삭제 함수를 따로 만들어줘야 한다는 것
- 이것을 올인원느낌으로 한 곳에 때려박는게 클래스
- 클래스와 구조체의 가장 큰 차이는 접근제한 지시자 (클래스는 default가 private, 구조체는 public)
- C++의 구조체는 클래스처럼 구조체 안에 함수를 집어넣을 수 있다. (생성자 소멸자 등)
접근제한 지시자에 대한 이야기
- 접근제한 지시자를 사용하는 이유는 협업자들 간에 건들지말아야 할 부분을 지정해주기 위함
this의 존재에 대한 이야기
- this는 객체를 가리키는 포인터로, 멤버함수의 작동원리는 this 포인터가 객체를 지정해서 함수호출하는 것.
- 함수 뒤에 const를 붙이면 내부 값을 변경할 수 없다.
- 그 이유는 this가 const this가 되기 때문, (const char* : 가리키는 값 변경 불가 / char* const : 포인터가 가리키는 주소 변경 불가)
- this는 변경 불가하다 this가 변경되면 나 자신을 잃어버리는 것과 동일하기 때문
- 그래서 this는 기본적으로 this const로 되어 있다 (가리키는 주소를 변경할 수 없게끔)
static_cast<type>에 대한 이야기
- C++에서의 캐스팅 문법
- 큰 타입에서 작은 타입으로 형변환 될 때 잃어버리는 데이터들에 대해 내부적으로 처리해준다.
생성자에 대한 이야기
- 생성될 때 처음 자동으로 호출되는 함수
- 객체가 생성될 때 F11을 통해 생성자로 커서가 옮겨지는 것을 확인함
- 생성자는 우리가 만들지 않아도 자동으로 만들어 줌
- Node() = default; 는 기본 생성자를 만들어달라고 명시적으로 요청하는 것
- 생성자는 보통 객체의 멤버를 초기화하는 용도로 쓰임
멤버 이니셜라이저에 대한 이야기
- 생성자 옆에 콜론(:) 붙이고 멤버(초기화할값) 이런 식으로 초기화
- 멤버마다 엔터로 구분해서 병렬로 쭉 내려놓는게 가독성측면에서 좋다.
생성자 오버로딩에 대한 이야기
- 생성자를 호출할 때 기본 생성자 외에 인자를 넘겨줄 수 있도록 함
- Node node(argument);
- 기본 생성자를 함수오버로딩처럼 인자값을 추가한 버전을 만들어서 사용
소멸자에 대한 이야기
- 소멸자 객체가 메모리에서 해제될 때 사용한다.
- 지역변수가 저장되는 곳은 스택이기 때문에 삭제될 때는 할당된 순서의 반대로 호출됨
복사 생성자에 대한 이야기
- 타입이 같은 다른 객체를 인자로 넘겨서 그 인자가 가진 특징을 복사한 객체를 만들 수 있다.
- 복사 생성자도 기본으로 만들어지는게 그건 얕은 복사로 작동하기 때문에
- 포인터 멤버를 가지고 있는 객체가 얕은 복사 후 각각 소멸할 경우 double free 가 발생한다.
- 이를 해결하기 위해 복사할 멤버에 포인터변수가 있다면 그 길이만큼 메모리를 할당하고
- 메모리를 옮겨 담는 작업을 거쳐야 한다.
'C++ > [AssortRock] C++ 기초 다지기' 카테고리의 다른 글
CPP_1. AssortRock 9일차 오프라인 수업_220919 (0) | 2022.09.20 |
---|---|
CPP_1. AssortRock 8일차 오프라인 수업_220916 (0) | 2022.09.18 |
CPP_1. AssortRock 6일차 오프라인 수업_220914 (0) | 2022.09.15 |
CPP_1. AssortRock 5일차 오프라인 수업_220913 (0) | 2022.09.15 |
CPP_1. AssortRock 4일차 오프라인 수업_220908 (0) | 2022.09.11 |
댓글