이펙티브 C++(230p ~ 239p)

    이펙티브 C++ https://www.yes24.com/Product/Goods/17525589 페이지 230p ~ 239p 이펙티브 C++(230p ~ 239p) 6. 상속, 그리고 객체 지향 설계 C++의 OOP는 일반적인 OOP보다 조금 더 생각할 부분이 있다. 상속은 단일 상속과 다중 상속이 가능하다. 상속 관계 하나하나가 public, protected, private 성질을 가질 수 있다. 가상 상속과 비가상 상속이 있다. C++에서 OOP 개념은 다음과 같다. public 상속은 반드시 is-a 관계를 뜻해야 한다. 가상 함수의 의미는 ‘인터페이스가 상속되어야 한다.’ 이지만 비가상 함수는 ‘인터페이스와 구현이 둘 다 상속되어야 한다.’이다. 항목 32: public 상속 모형은 반드시 is..

    이펙티브 C++(210p ~ 220p)

    이펙티브 C++ https://www.yes24.com/Product/Goods/17525589 페이지 210p ~ 220p 이펙티브 C++(210p ~ 220p) 항목 30: 인라인 함수는 미주알고주알 따져서 이해해 두자 인라인 함수는 함수처럼 보이고 함수처럼 동작하는데다가, 매크로보다 훨씬 안전하고 쓰기 좋다. 인라인 함수를 사용하면 함수 호출 비용이 면제된다. 대체적으로 컴파일러 최적화는 함수 호출이 없는 코드가 연속적으로 이어지는 구간에 적용되도록 설계되었기 때문에, 인라인 함수를 사용하면 컴파일러가 함수 본문에 대해 문맥별 최적화를 걸기가 용이해진다. 반대로 인라인 함수를 사용했을 때의 단점은 다음과 같다. 인라인 함수를 사용한 함수의 호출문은 함수의 본문으로 바꿔치기되기 때문에 목적 코드의 크..

    이펙티브 C++(201p ~ 210p)

    이펙티브 C++ https://www.yes24.com/Product/Goods/17525589 페이지 201p ~ 210p 이펙티브 C++(201p ~ 210p) 요약 항목 29: 예외 안전성이 확보되는 그날 위해 싸우고 또 싸우자! 다음 클래스는 스레딩 환경에서 동작할 수 있게 설계된 GUI 메뉴 클래스이다. class PrettyMenu { public: // 배경을 변경하는 함수 void changeBackground(std::istream& imgSrc); private: Mutex mutex; // 현재 배경 Image* bgImage; // 변경된 횟수 int imageChanges }; void PrettyMenu::changeBackground(std::istream& imgSrc) { ..

    이펙티브 C++(191p ~ 200p)

    이펙티브 C++ https://www.yes24.com/Product/Goods/17525589 페이지 191p ~ 200p 이펙티브 C++(191p ~ 200p) 요약 항목 27: 캐스팅은 절약, 또 절약! 잊지 말자 캐스팅이 들어가면, 보기엔 맞는 것 같지만 실제로는 틀린 코드를 쓰고도 모르는 경우가 많아진다. // 기본 클래스 class Window { public: virtual void onResize() {} } // 파생 클래스 class SpecialWindow: public Window { // 파생 클래스의 onResize에서 *this를 Window로 캐스팅하고, 그것에 대해 onResize 호출 // 동작은 안 됨 virtual void onResize() { static_cast(..