Язык программирования C++ от Страуструпа


.Интерфейсные классы - часть 4


void f()

{

  vector v(10);  // диапазон [0:9]

  // как будто v в диапазоне [1:10]:

  for (int i = 1; i<=10; i++) {

     v[i-1] = ... // не забыть пересчитать индекс

  }

  // ...

}

Лучшее решение дает класс vec c произвольными границами индекса:

class vec : public vector {

  int lb;

  public:

     vec(int low, int high)

     : vector(high-low+1) { lb=low; }

     int& operator[](int i)

       { return vector::operator[](i-lb); }

     int low() { return lb; }

     int high() { return lb+size() - 1; }

};

Класс vec можно использовать без дополнительных операций, необходимых в первом примере:

void g()

{

  vec v(1,10);  // диапазон [1:10]

  for (int i = 1; i<=10; i++) {

     v[i] = ...

  }

  // ...

}

Очевидно, вариант с классом vec нагляднее и безопаснее.

Интерфейсные классы имеют и другие важные области применения, например, интерфейс между программами на С++ и программами на другом языке ($$12.1.4) или интерфейс с особыми библиотеками С++.




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