Абстрактные классы

We use cookies. Read the Privacy and Cookie Policy

Абстрактные классы

Виртуальные методы могут быть объявлены как чисто виртуальные. Для этого после описания метода указывается специальный спецификатор (= 0). Он означает, что описанные методы не определены.

Класс в котором определен хотя бы один чисто виртуальный метод называется абстрактным. Нельзя создавать объекты абстрактного класса. Абстрактный класс может использоваться только в качестве базового класса для построения других классов.

Класс, порожденный от абстрактного класса, должен переопределять описанные в нем чисто виртуальные методы. В противном случае этот класс также будет абстрактным.

В качестве примера абстрактного класса мы приведем класс Abstract, в котором описан чисто виртуальный метод PureFunc. Обратите внимание, что этот метод не определен в классе Abstract. Определение метода содержится только в порожденном классе Fact.

// Абстрактный класс Abstract

class Abstract {

public:

 // Чисто виртуальный метод, не имеет определения

 virtual int PureFunc(void) = 0;

 void SetValue(int i) {iValue = i;}

 int iValue;

};

// Класс Fact

class Fact : public Abstract {

 int PureFunc(void) {return iValue * iValue;}

};