다형 (Polymorhphic)
- 다형이란 호출하는 객체에 따라 메서드의 행동이 달라질 수 있는 경우, 즉, 처한 상황에 따라 메서드가 여러 가지 다른 행동을 할 수 있어 여러가지 형식을 가지고 있는 복잡한 행동을 의미한다.
가상 메서드
- 어떤 메서드가 기초 클래스에서 가상으로 선언되었을 때, 그것은 파생 클래스에서 자동으로 가상 메서드가 된다.
- 파생 클래스의 선언에서도 virtual 키워드를 사용함으로써, 어떤 함수들이 가상인지 표시해두는 것이 바람직하다.
정적결합, 동적결합 (Binding)
- "함수 이름을 결합한다"라는 말은 소스코드에 있는 함수 호출을 특정 블록에 있는 함수 코드를 실행하는 뜻으로 해석하면 된다.
- 정적 결합(static binding) / 초기 결합(early binding) : 컴파일하는 동안에 일어나는 결합
- 동적 결합(dynamic binding) / 말기 결합(lately binding) : 가상함수를 사용할 때, 컴파일러는 프로그램을 실행할 때 올바른 가상메서드가 선택되도록 하는 코드를 만들어 실행하는 결합
업캐스팅(Upcasting)
- 파생 클래스 참조나 포인터를 기초 클래스 참조나 포인터로 변화하는 것
- public 상속에서는 명시적인 데이터형 변환이 없어도 언제든지 업캐스팅이 허용된다.
- 업캐스팅은 is-a 관계를 나타내는 한 부분이다.
- 업캐스팅은 전이되어 하나의 클래스를 파생시키면 관련된 객체를 모두 참조할 수 있다.
다운캐스팅 (Downcasting)
- 기초 클래스 포인터나 참조를 파생 클래스 포인터나 참조로 변환하는 것
- 다운캐스팅은 명시적인 데이터형 변환 없이는 허용되지 않는다.
- is-a 관계는 일반적으로 대칭적이지 않기 때문에 업캐스팅은 가능하지만, 다운캐스팅은 가능하지 않도록 제한한다.