C++

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

SWBlossom 2019. 12. 27. 15:45

순수 가상 클래스란?

 

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