- 부모 class : Base 클래스, Parent 클래스, Super 클래스, Existing 클래스와 같은 의미 - 자식 class : Derived 클래스, Child 클래스, Sub 클래스 / 부모 class에 의해 파생된 새로운 class / 부모의 모든 데이터 & 함수를 갖음 - "is-a relationship" : Derived 클래스 is a Base 클래스 (역은 성립하지 않음) / 부분집합으로 이해하면 편리
[Grammar]
class Base {
private:
public:
};
class Derived : public Base {
privatd:
public:
};
[protected 타입]
- 외부에서 protected 데이터나 함수에 접근할 수 없음 - derived class 에서는 base class의 protected 정보가 private 정보로 동작
[Multiple base class]
class Derived: public Base1, public Base2, public Base3 {
};
[Reusability & Specialization]
- 기존에 생성되었던 class를 이용하여 더 많은 동작을 하는 새로운 class를 생성할 수 있음 / 재사용한다는 점에서 효율적
Overriding
- 이름과 입력값이 모두 같으나, 그 기능이 다를때 사용 - 기존 class의 virtual function을 override하도록 지정
[Virtual, Override]
- Virtual : Base class에 사용되는 지정자이며, 상속받을 파생 class - Override : Base class의 virtual method를 derived class에서 동작을 정의하기 위해 사용됨
[Static Binding]
- Compile시 어떤 method를 호출할 지 미리 결정된 것을 의미 & 변경될 수 없음
[Dynamic Binding]
- Compile시 어떤 method를 호출할 지 미리 결정되지 않음 & 상황에 맞게 결정/변경 - Base class의 virtual로 지정되어 derived class에서 override되는 함수만 사용 가능
Binding flow chart
Polymorphism
- 다양한 derived class 사용 가능 - 프로그램의 응용에 필수적인 내용
Header File
- main 함수가 너무 밑으로 내려가 코드의 전체적인 구조를 파악할 수 없는 상황 방지 - class로 정의하는 함수들을 hpp 파일에 넣고 큰 틀로 작동하는 것들을 main함수에 넣어 코드 길이 줄임