Сущность технологии СОМ. Библиотека программиста   ::   Бокс Дональд

Страница: 46 из 528

Соответствующий класс реализации должен порождаться классом интерфейса и перекрывать все чисто виртуальные фyнкции содержательными реализациями. Эта наследственная связь проявится в объектах, которые в качестве своего представления имеют двоичное надмножество представления класса интерфейса (которое как раз и есть vptr/vtbl). Дело в том, что отношение «является» («is-a») между порождаемым и базовым классами применяется на двоичном уровне в C++ так же, как и на уровне моделирования в объектно-ориентированной разработке:

class FastString : public IFastString

{

const int m_cch;

// count of characters

// число символов

char *m_psz;

public:

FastString(const char *psz);

~FastString(void);

int Length(void) const;

// returns # of characters

// возвращает число символов

int Find(const char *psz) const;

// returns offset

// возвращает смещение

};

Поскольку FastString порождается от IFastString , двоичное представление объектов FastString должно быть надмножеством двоичного представления IFastString . Это означает, что объекты FastString будут содержать указатель vptr , указывающий на совместимую с таблицей vtbl IFastString . Поскольку классу FastString можно приписывать различные конкретные типы данных, его таблица vtbl будет содержать указатели на существующие реализации методов Length и Find . Их связь показана на рис. 1.6.

Даже несмотря на то, что открытые операторы над типами данных подняты до уровня чисто виртуальных функций в классе интерфейса, клиент не может приписывать значения объектам FastString , не имея определения класса для класса реализации.

|< Пред. 44 45 46 47 48 След. >|

Java книги

Контакты: [email protected]