과제의 핵심은 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함수를 초기화 해줘야 한다. 이때 매번 다른 수를 어떻게 넣어줄 수 있을까?
My Awesome Phonebook 과제를 통해 객체지향으로 프로그램을 설계하는 방법, 생성자로 인스턴스를 생성하는 방법, 접근제어 지시자와 const 함수로 좋은 클래스를 정의하는 방법을 학습했다.