попытка реализовать дереаво каталогов и файлов
От: Seregik  
Дата: 09.10.02 17:33
Оценка:
// Тут примерно такая идея
// Короче это попытка реализовать дереаво каталогов и файлов
// Что не так?
// А имею ввиду подход к проблемме.


template <class T> class cList 
{
public:
    T* pItem;
    cList<T> *pNext; //Указатель на следующий элемент

    cList(){...};
    ~cList(){
        cList<T>*ptr=this;
        if (ptr->pNext)
            delete (cList<T> *)ptr->pNext;
        delete (T*)pItem;
    };

    // Ну тут разные функции типа Add(...) Find(...)
}

class cFileRecord
{
    char* name;

public:
    char* atr; //некий признак дирректории
    cFileRecord(){...};
    ~cFileRecord(){
        Delete();
        };
    virtual void Delete()=0;
}

class cFolder: public cFileRecord
{
    cList<cFileRecord>pChild;
public:
    cFolder(char* nm){
        name=nm;
        pChild=NULL;
        atr="dir";
    }

    void AddChild(cFileRec& ps){
        if (pChild==NULL)
            pChild=new cList<cFileRec>;
        pChild->Add(ps);
    };

    Delete(){
        if(pChild->pItem->sAtr[0]='d')
            delete (cDir*)pChild;
        else
         delete (cList<cFileRec>*)pChild;
    }

};

class cMemFile:public cFileRecord
{
    char *buff;
public:
    cMemFile(char *nm){
        name=nm;
        buff=NULL;
        atr="file";
    }
    Delete(){
        if (buff)
            free(buff);
    }
}

int main(int argc, char* argv[])
{
  
    cDir* pRootDir=new cDir("root");

    cDir* p_dir=new cDir("d00");
    pRootDir.AddChild(new cMemFile("f00"));
    pRootDir.AddChild(new cMemFile("f01"));
    pRootDir.AddChild(new cDir("d01"));
    p_dir.AddChild(new cDir("d10")
    pRootDir.AddChild(new cMemFile("f10"));
    pRootDir.AddChild(new cMemFile("f11"));
    // и т. д. ...
    
    
    // a вот как теперь сделать вот это
    delete pRootDir;

}
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.