소멸자(desturctor)
c++에서 생성자는 객체 멤버의 초기화뿐만 아니라,
객체를 사용하기 위한 외부 환경까지도 초기화하는 역할을 한다.
이러한 역할을 하는 멤버 함수를 소멸자(destructor)라고 한다.
소멸자는 객체의 수명이 끝나면 컴파일러에 의해 자동으로 호출되며, 사용이 끝난 객체를 정리해 준다.
상속(inheritance)
상속은 추상화, 캡슐화와 더불어 객체 지향 프로그래밍을 구성하는 중요한 특징 중 하나이다.
상속은 사용자에게 높은 수준의 코드 재활용성을 제공하며,
클래스 간의 계층적 관계를 구성함으로써 다형성의 문법적 토대를 마련한다.
클래스 상속(class inheritance)
C++에서 클래스 상속이란 기존에 정의되어 있는 클래스의 모든 멤버 변수와 멤버 함수를 물려받아,
새로운 클래스를 작성하는 것을 의미한다.
기존에 정의되어 있던 클래스를 기초 클래스, 부모 클래스, 상위 클래스라고도 한다.
그리고 상속을 통해 새롭게 작성되는 클래스를 파생 클래스, 자식 클래스, 하위 클래스라고 한다.
오버라이딩(overriding)
오버로딩이란 서로 다른 시그니처를 갖는 여러 함수를 같은 이름으로 정의하는 것
오버라이딩이란 이미 정의된 함수를 무시하고, 같은 이름의 함수를 새롭게 정의하는 것
다중 상속(multiple inheritance)
두 개 이상의 클래스로부터 멤버를 상속받아 파생 클래스를 생성하는 것을 의미한다.
C++에서는 쉼표를 사용하여 상속받을 여러 개의 기초 클래스를 명시하는 것으로 간단히 다중 상속을 구현할 수 있다.
가상 함수(virtual function)
파생 클래스에서 재정의할 것으로 기대하는 멤버 함수를 의미한다.
이러한 가상 함수는 자신을 호출하는 객체의 동적 타입에 따라 실제 호출할 함수가 결정된다.
동적 바인딩(dynamic binding)
함수를 호출하는 코드에서 어느 블록에 있는 함수를 실행하라는 의미로 해석하는 것을 바인딩(binding)
하지만 C++에서는 함수가 오버로딩될 수 있으므로 이 작업이 조금 복잡해진다.
가상 함수의 호출은 컴파일러가 어떤 함수를 호출해야 하는지 미리 알 수 없다.
왜냐하면, 가상 함수는 프로그램이 실행될 때 객체를 결정하므로, 컴파일 타임에 해당 객체를 특정할 수 없기 때문이다.
따라서 가상함수의 경우에는 런 타임에 올바른 함수가 실행될 수 있도록 해야 한다.
이것을 동적 바인딩 또는 지연 바인딩이라고 한다.
추상 클래스 (abstract class)
하나 이상의 순수 가상 함수를 포함하는 클래스를 추상 클래스라고 한다.