Производные классы

Теперь давайте определим вектор, для которого пользователь может задавать границы изменения индекса.

class vec: public vector {
int low, high;
public:
vec(int,int);
int& elem(int);
int& operator[](int);
};

Определение vec как

:public vector

означает, в первую очередь, что vec это vector. То есть, тип vec имеет (наследует) все свойства типа vector дополнительно к тем, что описаны специально для него. Говорят, что класс vector является базовым классом для vec, а о vec говорится, что он производный от vector.

Класс vec модифицирует класс vector тем, что в нем задается другой конструктор, который требует от пользователя указывать две границы изменения индекса, а не длину, и имеются свои собственные функции доступа elem(int) и operator[](int). Функция elem() класса vec легко выражается через elem() класса vector:

int& vec::elem(int i)
{
return vector::elem(i-low);
}

Операция разрешения области видимости :: используется для того, чтобы не было бесконечной рекурсии обращения к vec::elem() из нее самой. с помощью унарной операции :: можно ссылаться на нелокальные имена. Было бы разумно описать vec::elem() как inline, поскольку, скорее всего, эффективность существенна, но необязательно, неразумно и невозможно написать ее так, чтобы она непосредственно использовала закрытый член v класса vector. Фунции производного класса не имеют специального доступа к закрытым членам его базового класса.
Конструктор можно написать так:

vec::vec(int lb, int hb) : (hb-lb+1)
{
if (hb-lb<0) hb = lb;
low = lb;
high = hb;
}

Запись : (hb-lb+1) используется для определения списка параметров конструктора базового класса vector::vector(). Этот конструктор вызывается перед телом vec::vec(). Вот небольшой пример, который можно запустить, если скомпилировать его вместе с остальными описаниями vector:

#include

void error(char* p)
{
cerr << p << "n\\"; // cerr - выходной поток сообщений об ошибках
exit(1);
}

void vector::set_size(int) { /* пустышка */ }



Опубликовал admin
23 Мар, Вторник 2004г.



Программирование для чайников.