상속 개념

기반 클래스의 공통 부분을 파생 클래스가 이어받아 특화한다

`Dog`는 `Animal`의 한 종류라는 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`에 한 번만 둔다.
확장 `Dog`는 `breed`, `bark()`처럼 새 특징을 더한다.
재정의 `displayInfo()`는 기반 정보를 먼저 출력한 뒤 추가 정보를 붙인다.
읽는 법 `Dog` 객체 안에는 `Animal` 부분 객체가 먼저 자리 잡고, 그 위에 `Dog` 전용 멤버가 덧붙는다.