C++ 문법

[C++] 추상 클래스

simstealer 2022. 6. 3. 10:23

추상 클래스

- 인스턴스를 만들 수 없는 클래스

class AbstractClass
{
  // 아래와 같은 가상 함수를 순수 가상 함수(Pure Virtual Function)라 하며
  // 정의는 하지 않고 보통 선언만 한다.
  virtual void Foo() = 0;
}
 
AbstractClass obj; // 컴파일 오류! 추상 타입은 인스턴스를 생성할 수 없다.
// Abstract는 추상 클래스이다.
struct Abstract
{
  virtual void Foo() = 0;
};
 
struct Base : Abstract
{
  // 순수 가상 함수를 오버라이딩 하지 않으면
  // Abstract::Foo()를 그대로 Base가 갖게 되며,
  // Base 또한 추상 클래스가 된다.
};
 
// Derived는 Foo()를 오버라이딩 하였으므로
// 추상 클래스가 아닌 구체 클래스(Concrete Class)다.
struct Derived : Base
{
  void Foo() { }
};
 
Abstract temp; // 컴파일 오류! Abstract는 추상 타입
Base temp; // 컴파일 오류! Base는 추상 타입
Derived d; // OK. Derived는 구체 타입