Абстрактный класс
От: Аноним  
Дата: 06.08.07 12:30
Оценка:
Помогите решить вот это:
создал абстрактный класс

//FileDriver.h
#pragma once

class CFileDriver
{
    HANDLE m_hFile;

public:
    virtual int DesiredAccess() = 0;
    bool OpenFile(const wchar_t *);
    void CloseFile();
    CFileDriver(void);
public:
    virtual ~CFileDriver(void);
};


// FileDriver.cpp
#include "StdAfx.h"
#include "FileDriver.h"

CFileDriver::CFileDriver(void)
{
}

bool CFileDriver::OpenFile(const wchar_t * _file){
    m_hFile = CreateFile(_file, DesiredAccess(), 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);    
    return true;    
}

void CFileDriver::CloseFile(){
    CloseHandle(m_hFile);    
}

CFileDriver::~CFileDriver(void) {}


создал сына:
// JReader.h
#pragma once
#include "FileDriver.h"
class CJKernel;

class СJReader:
    public CFileDriver
{
    CJKernel * pJKernel;
public:
    int DesiredAcces();
    СJReader(CJKernel *);
public:
    ~СJReader(void);
};



// JReader.cpp
#include "StdAfx.h"
#include "JReader.h"

#include "JKernel.h"

СJReader::СJReader(CJKernel * _pJKernel)
{
    pJKernel = _pJKernel;
}

int СJReader::DesiredAcces(){
    return GENERIC_READ;
}

СJReader::~СJReader(void){}


Как видно, единственный чистый виртуальный метод базового класса здесь реализован, но если сделать

CJKernel kernel;
CJReader pReader = new CJReader(&kernel);


получаем ошибку компиляции:


1>... error C2259: 'СJReader' : cannot instantiate abstract class

1> due to following members:
1> 'int CFileDriver::DesiredAccess(void)' : is abstract
1> ...\filedriver.h(8) : see declaration of 'CFileDriver::DesiredAccess'
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.