"Мюррэй Хилл, Бьярн Страустрап. Язык С++" - читать интересную книгу автора 1.13 Производные классы
Теперь давайте определим вектор, для которого пользователь может задавать границы изменения индекса. 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 тем, что в нем задается другой конструктор, который требует от пользователя указывать две границы изменения индекса, а не длину, и имеются свои собственные 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; } |
|
|