책
이펙티브 C++(306p ~ 312p)
이펙티브 C++ https://www.yes24.com/Product/Goods/17525589 페이지 306p ~ 312p 이펙티브 C++(306p ~ 312p) 요약 항목 43: 템플릿으로 만들어진 기본 클래스 안의 이름에 접근하는 방법을 알아 두자 서로 다른 몇 개의 회사에 메시지를 전송할 수 있는 프로그램을 만들어야 한다. 어떤 메시지가 어떤 회사로 전송될지를 컴파일 도중에 결정할 수 있는 충분한 정보가 있다면, 템플릿 기반의 방법을 사용할 수 있다. class CompanyA { public: void sendCleartext(const std::string& msg); void sendEncrypted(const std::string& msg); } class CompanyB { public:..
이펙티브 C++(295p ~ 306p)
이펙티브 C++ https://www.yes24.com/Product/Goods/17525589 페이지 295p ~ 306p 이펙티브 C++(295p ~ 306p) 요약 7. 템플릿과 일반화 프로그래밍 C++ 템플릿은 사용자가 타입에 관계없는 컨테이너를 만들어 사용할 때 타입 안전성을 부여할 수 있도록 만들기 위해 도입됐다. 일반화 프로그래밍은 템플릿의 한 응용 분야로 파생되었다. 이를 기반으로 템플릿 메타프로그래밍이라는 새로운 영역이 탄생하였다. 이는 컴파일러 내부에서 실행되고 컴파일 과정이 끝날 때 실행을 멈추는 또 하나의 프로그램을 만드는 것이다. 템플릿의 활용 영역은 팔색조처럼 다양하지만, 어떤 영역을 막론하고 템플릿 기반 프로그래밍이란 것의 밑바닥에는 핵심 아이디어가 존재한다. 항목 41: 템플..
이펙티브 C++(279p ~ 290p)
이펙티브 C++ https://www.yes24.com/Product/Goods/17525589 페이지 279p ~ 290p 이펙티브 C++(279p ~ 290p) 요약 항목 39: private 상속은 심사숙고해서 구사하자 C++는 public 상속을 is-a 관계로 나타낸다. 앞서 public 상속 관계로 구현된 Person, Student를 private 상속으로 바꿔보자. class Person {}; class Student : private Person {}; void eat(const Person& p); void study(const Student& s); Person p; Student s; int func() { eat(p); // 에러 발생. Student는 Person의 일종이 아님..
이펙티브 C++(270p ~ 279p)
이펙티브 C++ https://www.yes24.com/Product/Goods/17525589 페이지 270p ~ 279p 이펙티브 C++(270p ~ 270p) 요약 항목 37: 어떤 함수에 대해서도 상속받은 기본 매개변수 값은 절대로 재정의하지 말자 C++에서 상속받을 수 있는 함수의 종류는 가상 함수와 비가상 함수뿐이다. 비가상 함수는 언제라도 재정의해서는 안 되는 함수이다. 따라서 기본 매개변수 값을 가진 가상 함수를 상속하는 경우에 이를 절대로 재정의하지 않는 것으로 범위를 좁힐 수 있다. 가상 함수는 동적으로 바인딩되지만, 기본 매개변수 값은 정적으로 바인딩된다. 객체의 정적 타입(static type)은 프로그램 소스 안에 있는 선언문을 통해 그 객체가 갖는 타입이/다. // 정적 타입 S..