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


Двоичное дерево - часть 3



void operator()(void* pnew,int (*cmp)(void*,void*))
{
if (data==NULL) { data=pnew; return; }
int n=(*cmp)(key,data);
if (n==0) return;
if (n &#60 0)
{
if (l==NULL) l=new btree;
(*l)(pnew,cmp);
}
else
{
if (r==NULL) r=new btree;
(*r)(pnew,cmp);
}
}


Простейшим случаем введения иерархии в систему классов является использование объектов ранее определенных классов в качестве элементов данных нового класса. Взаимодействие классов в этом случае ограничивается тем, что новый класс использует стандартный интерфейс объекта: функции-элементы и переопределенные операции, то есть работает с ним как с любым другим базовым типом данных. С абстрактной точки зрения элемент данных -объект класса представляет собой некоторое частное свойство более сложного класса, в котором он определен. Рассмотрим в качестве примера класс man -информация о человеке, включающая в себя даты рождения и поступления на работу:


class man
{
char name[20]; // Другие элементы класса


char *address;
dat dat1; // Дата рождения


dat dat2; // Дата поступления на работу


public: ...
man(char*); // Конструктор


};

Единственной проблемой здесь является конструирование объектов -элементов данных. Здравый смысл подсказывает, что если в конструкторе нового класса не содержится информации о конструировании объектов -элементов данных, то по умолчанию для них возможен только вызов их собственных конструкторов без параметров, причем перед вызовом конструктора нового класса. Действительно, последний может воспользоваться некоторыми свойствами уже инициализированных внутренних объектов.

Если все-таки требуется использовать конструкторы внутренних объектов с параметрами, то в заголовке конструктора нового класса их необходимо явно перечислить. Их параметры могут быть любыми выражениями, включающими формальные параметры конструктора нового класса:


class man
{
char name[20]; // Другие элементы класса


dat dat1; // Дата рождения


dat dat2; // Дата поступления на работу


public:
man(char *,char *,char *); // Конструкторы




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