Предыдущий способ хороший, но он исключает конструктор по умолчанию. Это значит, что данный класс может быть членом другого класса только как динамический объект. Нечего страшного нет, но все таки во первых придется следить за распределением памяти. Но кроме того пока объект есть заняты и ресурсы. Нужно использовать ресурс нужно создавать объект, ненужно использовать ресурс нужно удалять объект. Второй способ заключается в использовании чисто виртуальной функции. Смотрите как изменить описание класса.
class CComPort { public: virtual void Operations(); // для работы с портом void OpenPort(LPCTSTR PortName,DWORD dwDesiredAccess, DWORD dwShareMode,LPSECURITY_ATTRIBUTES lpSecurityAttributes, DWORD dwCreationDisposition,DWORD dwFlagsAndAttributes, HANDLE hTemplateFile); CComPort(); virtual ~CComPort(); private: HANDLE ComPort; };
По вызову функции Самое тут главное в том, что объект класса может существовать до сколько угодно. В любой момент мы можем вызывать функцию работы для активизации работы с портом. По выполнению порт будет закрыт. Ну и использование подобного класса упрощается.
Теперь без разницы динамический класс или статический, теперь не обязательно использовать исключения а можно возвращать результат операции через функцию, теперь функцию можно вызывать многократно и так далее.
CComPort::CComPort()
{
}
CComPort::~CComPort()
{
}
void CComPort::OpenPort(LPCTSTR PortName,DWORD dwDesiredAccess,
DWORD dwShareMode,LPSECURITY_ATTRIBUTES lpSecurityAttributes,
DWORD dwCreationDisposition,DWORD dwFlagsAndAttributes,
HANDLE hTemplateFile)
{
ComPort=CreateFile(PortName,dwDesiredAccess,
dwShareMode,lpSecurityAttributes, dwCreationDisposition,
dwFlagsAndAttributes,hTemplateFile);
if(ComPort==INVALID_HANDLE_VALUE)
throw CString("Error Open");
Operations();
CloseHandle(ComPort);
}
void CComPort::Operations()
{
}
#include "stdafx.h"
#include "ComPort.h"
#include "iostream.h"
class CMyCom : public CComPort
{
public:
void Operations();
};
void CMyCom::Operations()
{
}
void main()
{
try
{
CMyCom cm;
cm.OpenPort("LPT1",GENERIC_READ|GENERIC_WRITE,0,
NULL,OPEN_EXISTING,0,NULL);
}
catch(...)
{
cout << "Error" << endl;
return;
}
}