추상 기본 클래스 (Abstract class)
순수 가상 함수가 하나라도 존재하는 클래스
순수 가상 함수가 존재하는데 오버라이딩하는 함수가 없을 경우, 에러가 발생한다.
예제
#include <iostream>
class Animal
{
protected:
std::string name_;
public:
Animal(const std::string &name_in)
: name_(name_in)
{}
std::string getName() { return name_; }
virtual void speak() const = 0; // pure virtual function
};
class Cat : public Animal
{
public:
Cat(const std::string& name_in)
: Animal(name_in)
{}
void speak() const
{
std::cout << name_ << " Meow\n";
}
};
class Dog : public Animal
{
public:
Dog(const std::string& name_in)
: Animal(name_in)
{}
void speak() const
{
std::cout << name_ << " Woof\n";
}
};
class Cow : public Animal
{
public:
Cow(const std::string& name_in)
: Animal(name_in)
{}
};
int main()
{
using namespace std;
Animal ani("hello"); // 에러
Cow cow("cau"); // 에러
}
error C2259: 'Animal': cannot instantiate abstract class
error C2259: 'Cow': cannot instantiate abstract class
첫 번째 에러는 추상 클래스를 인스턴스화하려해서 발생하는 에러이다.
두 번째 에러도 마찬가지인데,
Cow
클래스에서speak
함수를 오버라이딩하지 않으므로Cow
클래스 역시 추상 클래스이다.
'C++ > Class' 카테고리의 다른 글
C++ 다이아몬드 상속 (Diamond Polymorphism) (0) | 2021.03.21 |
---|---|
C++ 인터페이스 클래스 (Interface Class) (0) | 2021.03.21 |
C++ 순수 가상 함수 (Pure Virtual Function) (0) | 2021.03.21 |
C++ 가상 (함수) 테이블 (Virtual Tables) (0) | 2021.03.20 |
C++ 동적 바인딩 (Dynamic Binding) (0) | 2021.03.20 |