순수 가상 클래스란?
순수 가상 클래스(Pure virtual class)는 순수 가상 함수(Pure virtual function)를 멤버로 가진 클래스이다. 순수 가상 함수는 선언은 지금 하지만 나중에 정의하도록 놔둔 함수이다. 따라서 함수 선언 시 '=0'이라는 표시를 한다. 함수에 '=0'과 같은 표현은 어색하지만 하나의 표시라고 생각하자.
virtual int getNum() = 0;
예제
#include <iostream>
using namespace std;
//부모 클래스
class FirstClass
{
public:
FirstClass() { cout << "FirstClass()" << endl; }
//선언만 있고 정의는 없는 순수 가상 함수
virtual int getNum() const = 0;
virtual void setNum(int param) = 0;
};
//파생 클래스
class SecondClass : public FirstClass
{
public:
SecondClass() { cout << "SecondClass()" << endl; }
//순수 가상 함수는 파생 클래스에서 반드시 정의
virtual int getNum() const { return num; }
virtual void setNum(int param) { num = param; }
private:
int num = 0;
};
int main()
{
//순수 가상 클래스는 인스턴화할 수 없다.
//FirstClass a; 에러
SecondClass b;
b.setNum(100);
cout << b.getNum() << endl;
return 0;
}
결과값:
FirstClass()
SecondClass()
100
순수 가상 클래스와 순수 가상 함수를 사용할 때는 두 가지를 명심해야 한다.
1. 순수 가상 함수를 가진 순수 가상 클래스 FirstClass는 인스턴스를 선언하거나 동적으로 생성할 수 없다.
2. 순수 가상 클래스의 파생 클래스 SecondClass는 순수 가상 함수를 반드시 재정의해야 한다.
'C++' 카테고리의 다른 글
[C++] friend 함수와 friend 클래스 (0) | 2019.12.30 |
---|---|
[C++] 벡터(vector)와 메소드들(push_back, front, back, begin, end) (0) | 2019.12.28 |
[C++] 가상 함수(Virtual function)와 소멸자 가상화 (0) | 2019.12.27 |
[C++] 메소드 오버라이드(Override) (0) | 2019.12.26 |
[C++] 생성자 상속 (0) | 2019.12.26 |