상속
이펙티브 C++(270p ~ 279p)
이펙티브 C++ https://www.yes24.com/Product/Goods/17525589 페이지 270p ~ 279p 이펙티브 C++(270p ~ 270p) 요약 항목 37: 어떤 함수에 대해서도 상속받은 기본 매개변수 값은 절대로 재정의하지 말자 C++에서 상속받을 수 있는 함수의 종류는 가상 함수와 비가상 함수뿐이다. 비가상 함수는 언제라도 재정의해서는 안 되는 함수이다. 따라서 기본 매개변수 값을 가진 가상 함수를 상속하는 경우에 이를 절대로 재정의하지 않는 것으로 범위를 좁힐 수 있다. 가상 함수는 동적으로 바인딩되지만, 기본 매개변수 값은 정적으로 바인딩된다. 객체의 정적 타입(static type)은 프로그램 소스 안에 있는 선언문을 통해 그 객체가 갖는 타입이/다. // 정적 타입 S..
이펙티브 C++(250p ~ 261p)
이펙티브 C++ https://www.yes24.com/Product/Goods/17525589 페이지 250p ~ 261p 이펙티브 C++(250p ~ 261p) 요약 항목 34: 인터페이스 상속과 구현 상속의 차이를 제대로 파악하고 구별하자 인터페이스 및 기본 구현을 제공하는 함수를 별도로 마련하는 방법을 별로 좋아하지 않을 수도 있다. 이를 위해 순수 가상 함수가 파생 클래스에서 재선언되어야 한다는 사실을 활용하되, 자체적으로 순수 가상 함수의 구현을 준비해 둘 수 있다. class Airplane { public: virtual void fly(const Airport& destination) = 0; } void Airplane::fly(const Airport& destination) { //..
이펙티브 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++(240p ~ 250p)
이펙티브 C++ https://www.yes24.com/Product/Goods/17525589 페이지 240p ~ 250p 이펙티브 C++(240p ~ 250p) 요약 항목 33: 상속된 이름을 숨기는 일은 피하자 int x; // 전역 변수 void someFunc() { double x; std::cin >> x; } 값을 읽어 x에 넣는 위의 문장에서 실제로 참조하는 x는 전역 변수 x가 아니라 지역 변수 x이다. 안쪽 유효범위에 있는 이름이 바깥쪽 유효범위에 있는 이름을 가리기 때문이다. 상속 관계에서는 기본 클래스에 속해 있는 것을 파생 클래스 멤버 함수 안에서 참조하는 문장이 있으면 컴파일러는 이 참조 대상을 바로 찾아낼 수 있다. 파생 클래스의 유효범위가 기본 클래스의 유효범위 안에 중첩되..