Контрольная работа: Распределенная обработка данных
public:
virtual void Fy1() = 0;
virtual void Fy2() = 0;
};
class CA : public IX, public IY // Компонент
{
public:
// Реализация абстрактного базового класса IX
virtual void Fx1() { cout << “Fx1” << endl; }
virtual void Fx2() { cout << “Fx2” << endl; }
// Реализация абстрактного базового класса IY
virtual void Fy1() { cout << “Fy1” << endl; }
virtual void Fy2() { cout << “Fy2” << endl; }
};
IX и IY — это чисто абстрактные базовые классы, которые используются для реализации интерфейсов. Чистоабстрактный базовый класс (pure abstract base class) — это базовый класс, который содержит только чисто виртуальные функции (pure virtual functions). Чисто виртуальная функция — это виртуальная функция, «помеченная =0 — знаком спецификатора чистоты (pure specifier). Чисто виртуальные функции не реализуютсяв классах, в которых объявлены. Как видно из приведенного выше примера, функции IX::Fx1, IX::Fx2, IY::Fy1 и IY::Fy2 только декларируются. Реализуются же они в производном классе. В приведенном фрагменте кода компонент CA наследует два чисто абстрактных базовых класса — IX и IY — и реализует их чисто виртуальные функции.
Для того, чтобы реализовать функции-члены IX и IY, CA использует множественное наследование. Последнее означает, что класс является производным более чем от одного базового класса. Класс С++ чаще всего использует единичное наследование, т.е. имеет только один базовый класс.
Текст программы:
#include "stdafx.h"
#include "iostream.h"
#include "objbase.h" // Определить интерфейс
#include "conio.h"
void trace(const char* pMsg) { cout << pMsg << endl; }
// Абстрактные интерфейсы
interface IX
{
virtual void __stdcall Fx1() = 0;
virtual void __stdcall Fx2() = 0;