728x90
함수의 구현부가 없이 =0 으로 종결한 함수를 순수 가상 함수(pure virtual function) 이라고 부릅니다.
그리고 이러한 함수를 하나라도 가진 클래스를 추상 클래스(abstract class) 라고 부릅니다.
class Color
{
public:
virtual void code() = 0;
};
추상 클래스는 객체를 생성할 수 없습니다. 단, 포인터 변수는 생성할 수 있습니다.
Color color; // 실패
Color* color; // 성공
추상 클래스를 사용하는 이유는 파생 클래스에게 이 함수는 반드시 구현해야 내 카테고리에 속할 수 있다를 알리기 위함입니다.
만약, 파생 클래스가 해당 함수의 실체를 (override하여) 구현하지 않으면 해당 파생 클래스 또한 추상 클래스가 됩니다.
아래의 코드를 보시면 Red, Blue가 똑같이 Color를 상속받았지만 Red는 code()를 override하여 구현하였고, Blue는 구현하지 않았기 때문에 객체를 생성하지 못하는 것을 확인할 수 있습니다.
#include <iostream>
using namespace std;
class Color
{
public:
virtual void code() = 0;
};
class Red : public Color
{
public:
void code() override {
cout << "#FF0000" << endl;
}
};
class Blue : public Color
{
};
int main()
{
Red red;
red.code();
Blue blue; // 에러
}
Reference
'Pattern > C++' 카테고리의 다른 글
[C++] 템플릿 메소드 패턴 (Template method pattern) (0) | 2021.03.21 |
---|---|
[C++] 프로토타입 패턴 (Prototype pattern) (0) | 2021.03.21 |
[C++] interface와 결합(Coupling) (0) | 2021.03.20 |
[C++] Upcasting, Downcasting, Virtual, Override (0) | 2021.03.20 |
[C++] Protected 생성자, 소멸자의 사용 방법 (0) | 2021.03.20 |