"Мюррэй Хилл, Бьярн Страустрап. Язык С++" - читать интересную книгу автора


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

- стр 40 -

#include

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

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

int& vec::operator[](int i)
{
if (i
1.14 Еще об операциях

Другое направление развития - снабдить вектора операциями:

- стр 41 -

class Vec : public vector {
public:
Vec(int s) : (s) {}
Vec(Vec&);
~Vec() {}
void operator=(Vec&);
void operator*=(Vec&);
void operator*=(int);
//...
};

Обратите внимание на способ определения конструктора производного
класса, Vec::Vec(), когда он передает свой параметр конструктору
базового класса vector::vector() и больше не делает ничего. Это
полезная парадигма. Операция присваивания перегружена, ее можно
определить так:

void Vec::operator=(Vec& a)
{
int s = size();
if (s!=a.size()) error("плохой размер вектора для =");