하나 이상의 순수 가상 함수를 포함하는 클래스를 추상 클래스라고 한다.
이러한 추상 클래스는 객체 지향 프로그래밍에서 중요한 특징인 다형성을 가진 함수의 집합을 정의할 수 있게 해줍니다.
즉, 반드시 사용되어야하는 멤버 함수를 추상 클래스에 순수 가상 함수로 선언해 놓으면, 이 클래스로부터 파생된 모든 클래스는 이 가상함수를 반드시 재정의해야 합니다.
추상 클래스는 정의 되어있지 않은 순수 가상 함수를 포함하므로, 객체를 만들 수 없습니다.(인스턴스 불가)
즉, 파생 클래스에서 순수 가상 함수를 모두 오버라이딩하고 나서야 비로소 파생 클래스의 객체를 생성할 수 있습니다.
하지만 추상 클래스의 포인터와 참조는 바로 사용할 수 있습니다. 이를 이용하여 업캐스팅형식의 객체를 선언할 수도 있습니다.
추상 클래스의 용도 제한
C++에서 추상 클래스는 다음과 같은 용도로는 사용할 수 없습니다.
1. 변수 또는 멤버 변수
2. 함수의 전달되는 인수 타입
3. 함수의 반환 타입 (부분적으로 연산자 오버라이딩을 할 수 없다.)
4. 명시적 타입 변환의 타입
출처 :
http://www.tcpschool.com/cpp/cpp_polymorphism_abstract