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


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


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


//------------------------------------------------------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;



Начало  Назад  Вперед