상속 개념

기반 클래스와 파생 클래스

DogAnimal의 한 종류라는 is-a 관계를 코드로 표현한다. 공통 상태와 동작은 기반 클래스에 두고, 파생 클래스는 필요한 멤버를 더하거나 함수를 재정의한다.

기반 클래스 Animal 공통 모델

이름, 종, 나이처럼 여러 동물이 공유하는 데이터와 displayInfo(), getter 같은 기본 동작을 정의한다.

class Animal {
private: name
protected: species, age
public: displayInfo(), getName()
파생 클래스 Dog 특화 구현

Animal을 public으로 상속해 외부 인터페이스를 유지하고, 견종과 짖기 동작, 재정의된 출력 동작을 추가한다.

class Dog : public Animal {
breed;
bark();
displayInfo() override;
public 멤버 파생 객체의 외부 인터페이스로 그대로 이어진다.
protected 멤버 파생 클래스 내부 구현에서 직접 사용할 수 있다.
private 멤버 상속은 되지만 직접 접근은 막고 public 함수로 다룬다.
재사용 공통 코드는 Animal에 한 번만 둔다.
확장 Dogbreed, bark()처럼 새 특징을 더한다.
재정의 displayInfo()는 기반 정보를 먼저 출력한 뒤 추가 정보를 붙인다.
대체 가능성 Dog 객체 안에는 Animal 부분 객체가 먼저 자리 잡고, 그 위에 Dog 전용 멤버가 덧붙는다.