Информатика и технология программирования

         

Что такое произвольный элемент коллекции


Каким образом можно определить произвольный элемент коллекции ? Это та основа, которая объединяет конкретные типы элементов (классы: целые, вещественные, строки и т.д.). В Си++ для этой цели используются абстрактные базовые классы. Все функции-элементы такого класса являются виртуальными, все переопределяются в производных классах. Абстрактный класс элементов таблицы является общим интерфейсом конкретных типов элементов (классов) ко всем остальным классам программы.


//------------------------------------------------------bk8-02.cpp


//------Класс абстрактных элементов коллекции


class ostream;
class TElem
{
public:
TElem(); // Конструктор


virtual ~TElem();
//----- Виртуальный деструктор. Если объект производного


// класса уничтожается по указателю на объект базового,


// то деструктор должен быть виртуальной функцией. Это


// случается при уничтожении динамических объектов в


// операции delete.


virtual BOOL FromString(char *)=0;
virtual char *ToString()=0;
//----- Функции загрузки содержимого объекта из строки и


// создания строки, содержащей внешнее представление зна-


// чения объекта.


friend ostream&#38 operator&#60&#60(ostream&#38 s, TElem *pm)
{
char *p;
p = pm-&#62ToString();
s &#60&#60 p;
delete p;
return s;
}
//----- Переопределенный оператор &#60&#60 вывода в поток объекта




// TElem, заданного указателем (вызывается виртуальная


// функция ToString в производном классе)


virtual int Compare(TElem *)=0;
//----- Функция сравнения двух объектов. Является основой


// любой сортировки, упорядочения и поиска объекта. Дает


// результат вида:


// 0 - значения равны,


// -1 - значение текущего объекта меньше значения


// объекта - параметра.


// 1 - значение текущего объекта больше


virtual BOOL IsValid()=0;
//----- Функция проверки корректности значения объекта


virtual TElem *Copy()=0;
//----- Функция создания копии объекта, точнее объекта того


// же производного класса, что и текущий.


virtual int IDENT()=0;
virtual char *Name()=0;


//----- Функции, идентифицирующие производный класс объекта,

// возвращают его идентифицирующий номер и строковую

// константу - имя класса.

//----- Следующие функции связаны с хранением объекта в

// файле. Для работы с двоичным файлом произвольного до-

// ступа объект должен уметь сохранить свое значение по

// произвольному смещению в файле (Save), загрузить зна-

// чение (Load), добавить значение (Append). Для других

// классов, осуществляющих планирование файла, важно также

// знать размерность даннных объекта в файле (FSize).

virtual int FSize()=0;
virtual FPTR Update(BinFile&#38, FPTR=FNULL,int=1)=0;
virtual FPTR Append(BinFile&#38)=0;
virtual BOOL Load(BinFile&#38, FPTR=FNULL)=0;
};

TElem::TElem() {}
TElem::~TElem() {}

Содержание раздела