과제의 핵심은 stack이 CPP에서 <컨테이너 어댑터>라는 점을 인식하는 것이다.
ex00과제에서 static_cast 를, ex01과제에서 reinterpret_cast 를, ex02과제에서 dynamic_cast 에 대해 학습한다.
C에서는 조건문(if)를 통해서 예외를 처리했었지만, CPP에서는 보다 더 직관적인 문법을 제공한다.
추상 클래스의 특징은 오버라이드, 즉 '함수를 반드시 재정의해야하는 것'이라고 정리할 수 있을 것 같다. 순수 가상함수를 재정의하지 않으면 코드 상에서 에러로 판단하기 때문에 실수들을 방지할 수 있다.
과제를 요약하자면, 마법사 Sorcerer가 불쌍한 Victim 과 Peon을 동물로 변신시켜버리는 내용이다. 이 때 마법에 당한(?) Victim과 Peon은 같은 getPolymorphed() 메서드를 호출하지만, 그 실행 결과는 다르다.
다중 상속 클래스 객체 생성시의 문제점은, 기초 클래스 ClapTrap이 불필요하게 두 번 생성된다는 점이다.
canonical이란, "규정대로"하는 프로그래밍을 의미한다. 앞으로의 CPP 과제는 Coplien form 규정대로 클래스를 작성해야한다.
this와 stringstream 을 활용해 인스턴스의 주소값을 문자열로 얻을 수 있다.
참조자와 포인터의 차이점, 그리고 댕글링 레퍼런스의 위험성과 그것을 해결하는 방법 중 하나인 Const 참조자에 대한 정리.
진짜 '랜덤'한 수를 얻으려면 seed에 매번 다른 숫자를 넣어 srand함수로 rand함수를 초기화 해줘야 한다. 이때 매번 다른 수를 어떻게 넣어줄 수 있을까?
new 는 1.메모리 할당, 2.생성자 호출, 3.타입 변환 까지 총 세 가지의 일을 한다. malloc보다 훨씬 유용하다.
My Awesome Phonebook 과제를 통해 객체지향으로 프로그램을 설계하는 방법, 생성자로 인스턴스를 생성하는 방법, 접근제어 지시자와 const 함수로 좋은 클래스를 정의하는 방법을 학습했다.
뮤텍스(Mutex)와 세파모어(Semaphore)는 모두 동시성 프로그래밍의 가장 큰 숙제인, "여러 프로세스나 스레드가 공유자원에 접근하는 것을 제어(관리)" 하기 위해 고안된 기법이다.
원하는 상태(desired stats)를 다양한 오브젝트(objects)로 정의(spec)하고 API 서버에 yaml 형식으로 전달한다.