// Тут примерно такая идея
// Короче это попытка реализовать дереаво каталогов и файлов
// Что не так?
// А имею ввиду подход к проблемме.
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;
}
Извиняюсь первый раз я очень небркжно подошол и к изложению вопроса
Сделал очень много ошибок.
Теперь надеюсь более точно выразился
В общем правильно ли я построил структуру программы, в смысле наследоания, использования шаблонов и виртуальных функций?
ВЫ мозги нашего общества, создавая дерево каталогов и файлов, сделали бы также или нет?
Никаких стандaртных list, tree, file и т.д. в моей системе применить нельзя.
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(...)
void Add(T*pi){};
};
class cFileRecord
{
public:
char* name;
char* atr;
cFileRecord(){};
~cFileRecord(){
Delete();
};
virtual void Delete(){};
};
class cFolder: public cFileRecord
{
cList<cFileRecord>* pChild;
public:
cFolder(char* nm){
name=nm;
pChild=NULL;
atr="dir";
};
void AddChild(cFileRecord* ps){
if (pChild==NULL)
pChild=new cList<cFileRecord>;
pChild->Add(ps);
};
void Delete(){
if(pChild->pItem->atr[0]='d')
delete (cFolder*)pChild;
else
delete (cList<cFileRecord>*)pChild;
};
};
class cMemFile:public cFileRecord
{
char *buff;
public:
cMemFile(char *nm){
name=nm;
buff=NULL;
atr="file";
}
void Delete(){
if (buff)
free(buff);
}
};
int main(int argc, char* argv[])
{
cFolder* pRootDir=new cFolder("root");
cFolder* p_dir=new cFolder("d00");
pRootDir->AddChild(new cMemFile("f00"));
pRootDir->AddChild(new cMemFile("f01"));
pRootDir->AddChild(new cFolder("d01"));
p_dir->AddChild(new cFolder("d10"));
pRootDir->AddChild(new cMemFile("f10"));
pRootDir->AddChild(new cMemFile("f11"));
delete pRootDir;
return 0;
}