상속이 쓰이는 대표적인 이유로 4가지가 있다

Animal클래스를 상속받는 Cat, Dog, Human를 만들 수 있고
이 클래스들은 Animal을 상속받았다는 관계를 갖게 된다.
또한 코드 재사용성도 좋아지는데, Animal에서 sleep()이라는 함수를 정의했다면
이 sleep()함수는 상속받은 Cat, Dog, Human클래스에서도 수정없이 사용이 가능하다.
일관적인 클래스 인터페이스를 만들수 있게해주는데
대표적으로 abstract/interface class로 정의하게되고
세부적으로 pure/virtual function으로 이를 구현한다.
또한 dynamic function binding을 위해 상속을 사용하기도 하는데
이는 virtual function/table로 구현한다.
간단한 상속 예제

Animal 클래스를 상속한 Human 클래스의 object인 nocope는 driveCar(), sleep()함수를 모두 가지므로

빌드하면 모두 리턴한다.
클래스를 상속받는데는
public, protected으로 받으면 똑같이 public, protected context를 받아 멤버 변수에 접근이 가능하지만
private으로 받게되면 public, private, protected모두 private로 받아 derived class에서 멤버 변수에 접근이 불가능하다.

위 그림에서 Base::pri에 접근하는 부분에서 에러가 생긴다.
