// Тут примерно такая идея
// Короче это попытка реализовать дереаво каталогов и файлов
// Что не так?
// А имею ввиду подход к проблемме.
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;
}