C++ C++ C# C# ASP.NET Security ASP.NET Security ASM ASM Скачать Скачать Поиск Поиск Хостинг Хостинг  
  Программа для работы с LPT портом...
Язык: .NET — ©Alexey...
  "ASP.NET Atlas" – AJAX в исполнении Micro...
Язык: .NET — ©legigor@mail.ru...
  "Невытесняющая" Многопоточность...
Язык: C/C++ — ©...
  01.05.2010 — Update World C++: Сборник GPL QT исходников
  15.12.2007 — Весь сайт целиком можно загрузить по ссылкам из раздела Скачать
Хостинг:
Windows 2003, ASP.NET 2.0
бесплатный и от 80 руб./мес


   Отправить письмо
Кулабухов Артем, Беларусь




 17 - Абстрактные классы / ActiveX по шагам / Приложение

Шаг 17 - Абстрактные классы

Объекты COM, OLE, ActiveX отличаются от обычных классов наличием интерфейсов. При работе с COM или OLE важно понятие абстрактного класса. Давайте решим так. Абстрактный класс это класс, который имеет объявление, но не имеет реализации. То есть для использования данного класса придется вывести из него другой класс, в котором и будут реализованы возможности. Смотрите пример абстракного класса.

// TTT.cpp : Defines the entry point for the application.
//

#include "stdafx.h"

class COleTestAbstract
{
public:
	virtual void Msg()=0;
};

int APIENTRY WinMain(HINSTANCE hInstance,
                     HINSTANCE hPrevInstance,
                     LPSTR     lpCmdLine,
                     int       nCmdShow)
{
 	// TODO: Place code here.
	// Закоментированно так как ошибочно
	   	//COleTestAbstract cb; 

	return 0;
}

Как видите объявлен класс без реализации. Просто он есть. Если раскомментировать строку с объявлением, то Вы получите ошибку типа как ниже.

D:\PROJECT\TTT\TTT.cpp(29) : error C2259: 'COleTestAbstract' : cannot instantiate abstract class due to following members:
D:\PROJECT\TTT\TTT.cpp(7) : see declaration of 'COleTestAbstract'

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

// TTT.cpp : Defines the entry point for the application.
//

#include "stdafx.h"

class COleTestAbstract
{
public:
	virtual void Msg()=0;
};

class COAbsatract : public COleTestAbstract
{
public:
	 void Msg();
};

void COAbsatract::Msg()
{
}

int APIENTRY WinMain(HINSTANCE hInstance,
                     HINSTANCE hPrevInstance,
                     LPSTR     lpCmdLine,
                     int       nCmdShow)
{
 	// TODO: Place code here.
	//
       //COleTestAbstract cb; 
	COAbsatract co;
	return 0;
}

Данный пример компилируется без проблем. Так и в модели COM, есть ряд абстрактных классов, которые необходимо реализовывать в Вашем объекте, например, IUnknown,IClassFactory,IDispath и так далее.


| |
Автор Каев Артем.
[AD]