Microsoft Visual C++ и MFC. Программирование для Windows 95 и Windows NT | страница 20



В программе создается объект класса Rectangle, а затем несколько раз вызываются методы PrintName и PrintDimention. В зависимости от того, как вызывается метод, будет работать метод, определенный в классе Figure или Rectangle.

>#include

>// Базовый класс Figure

>class Figure {

>public:

> // Виртуальный метод

> virtual void PrintName(void) {cout << Figure PrintName << ‘\n’}

> // Невиртуальный метод

> void PrintDimention(void) {cout << Figure PrintDimention << ‘\n’}

>};


>// Порожденный класс Rectangle

>class Rectangle : public Figure {

> // Переопределяем виртуальный метод базового класса

> virtual void PrintName(void) {cout << Rectangle PrintName << ‘\n’}


> // Переопределяем невиртуальный метод базового класса

> void PrintDimention(void) {cout << Rectangle PrintDimention << ‘\n’}

>};


>// Главная функция

>void main(void) {

> // Определяем объект порожденного класса

> Rectangle rectObject;


> // Определяем указатель на объект порожденного класса

> // и инициализируем его

> *Rectangle ptrRectObject = &rectObject;


> // Определяем указатель на объект базового класса Figure

> // и записываем в него адрес объекта порожденного класса.

> *Figure ptrFigObject = &rectObject;


> // Вызываем методы класса Rectangle, используя имя объекта

> rectObject.PrintName;

> rectObject.PrintDimention;

> cout << '\n';


> // Вызываем методы класса базового класса Figure

> rectObject.Figure::PrintName;

> rectObject.Figure::PrintDimention;

> cout << '\n';


> // Вызываем методы класса Rectangle, используя указатель на

> // объекты класса Rectangle

> ptrRectObject->PrintName;

> ptrRectObject->PrintDimention;

> cout << '\n';


> // Вызываем методы класса Rectangle, используя указатель на

> // объекты класса Figure

> ptrFigObject->PrintName;

> ptrFigObject->PrintDimention;

>}

Если вы запустите приведенную выше программу, она выведет на экран следующую информацию:

>Rectangle PrintName

>Rectangle PrintDimention


>Figure PrintName

>Figure PrintDimention


>Rectangle PrintName

>Rectangle PrintDimention


>Figure PrintName

>Figure PrintDimention

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

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

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

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