본문 바로가기

C++

[C++] 순수 가상 클래스(Pure virtual class)와 순수 가상 함수

순수 가상 클래스란?

 

순수 가상 클래스(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는 순수 가상 함수를 반드시 재정의해야 한다.