Для указателя:
TSpisok<Datatype> *pointer;
pointer=new TSpisok<Datatype>(new Datatype(initial values));
или
pointer=new TSpisok<Datatype>();
где:
Datatype - тип данных каждого элемента
Datatype(initial values) - конструктор для класса Datatype
со входными значениями.
Без использования указателя:
TSpisok<Datatype> array(new Datatype(initial values));
или
TSpisok<Datatype> array();
Доступ к элементам данных:
array[index] (pointer*)[index]
array.el(index) pointer->el(index)
*/
#ifndef __TSpisok
#define __TSpisok 1
template<class T>
class __TSpisok_el// Вспомогательный класс
{ public:
T *data;// Указатель на данные
__TSpisok_el *next,*prev;// Указатели на последующий и предыдущий элементы
__TSpisok_el(T *x);// Конструктор
__TSpisok_el();//Другой конструктор
~__TSpisok_el();//Деструктор
};
template<class T>
class TSpisok// Собственно класс списка
{ private:
int n;// Номер текущего элемента
int nmax;// Число элементов
__TSpisok_el<T> *data;// Указатель на текущий элемент
public:
TSpisok(T *);// Конструктор
TSpisok();//Другой конструктор
T& operator [](int);// Выборка элемента
T& el(int);//Выборка элемента
void new_el(T *);// Добавление элемента
void new_el();//Добавление нового элемента без инициализации
void delete_el(int);// Удаление элемента по номеру
int maxnumb();// Число элементов
~TSpisok();// Деструктор
};
#endif
Листинг файла TSpisok.cpp
template<class T> __TSpisok_el<T>::__TSpisok_el(T *x)
{ data=x;
next=NULL;
prev=NULL;
}
template<class T> __TSpisok_el<T>::__TSpisok_el()
{ next=NULL;
prev=NULL;
data=new T;
}
template<class T> __TSpisok_el<T>::~__TSpisok_el()
{ if(data!=NULL)
delete data;
}
template<class T> TSpisok<T>::TSpisok(T *x)
{ data=new __TSpisok_el<T>(x);
n=0;
nmax=1;
}
template<class T> TSpisok<T>::TSpisok()
{ data=NULL;
n=0;
nmax=0;
}
template<class T> T& TSpisok<T>::el(int m)
{ if(m<0||m>=nmax)return *(data->data);
while(m>n)
{ n++;
data=data->next;
}
while(m<n)
{ n--;
data=data->prev;
}
return *(data->data);
}
template<class T> T& TSpisok<T>::operator [](int m)
{ return el(m);
}
template<class T> void TSpisok<T>::new_el(T *x)
{ if(nmax==0)
{ data=new __TSpisok_el<T>(x);
nmax=1;
n=0;
}
else
{ while(n<nmax-1)
{ n++;
data=data->next;
}
data->next=new __TSpisok_el<T>(x);
nmax++;
(data->next)->prev=data;
}
}
template<class T> void TSpisok<T>::new_el()
{ if(nmax==0)
{ data=new __TSpisok_el<T>;
nmax=1;
}
else
{ while(n<nmax-1)
{ n++;
data=data->next;
}
data->next=new __TSpisok_el<T>();
nmax++;
(data->next)->prev=data;
}
}
template<class T> void TSpisok<T>::delete_el(int m)
{ __TSpisok_el<T> *temp;
if(m<0||m>=nmax)return;
while(m>n)
{ n++;
data=data->next;
}
while(m<n)
{ n--;
data=data->prev;
}
temp=data;
if(m!=0)
(data->prev)->next=data->next;
if(m!=nmax-1)
{ (data->next)->prev=data->prev;
data=data->next;
}
else
{ data=data->prev;
n--;
}
delete temp;
nmax--;
}
template<class T> int TSpisok<T>::maxnumb()
{ return nmax;
}
template<class T> TSpisok<T>::~TSpisok()
{ if(nmax>0)
{ while(n>0)
{ n--;
data=data->prev;
}
while(n<nmax-1)
{ n++;
data=data->next;
delete data->prev;
}
delete data;
}
}
Листинг файла TTask.h
#ifndef __TTask
#define __TTask 1
#include<string.h>
class TTask
{
public:
int option;//Тип задания
int length;//Длина записи
char *array;//Массив данных
TTask();
TTask(int opt,int len,char *source);//Конструктор
~TTask();//Деструктор
};
#endif
Листинг файла TTask.cpp
TTask::TTask()
{ array=NULL;
}
TTask::TTask(int opt,int len,char *source)
{ int i,l;
option=opt;
length=len;
switch(option)
{ case 0://Открытие файла
l=strlen(source)+1;
array=new char[l];
for(i=0;i<l;i++)
array[i]=source[i];
break;
case 1://Запись в файл
array=new char[length];
for(i=0;i<length;i++)
array[i]=source[i];
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.