С++ для начинающих


         

Здесь определены три экземпляра класса


#include <iostream>

#include "Array.h"

int main()

{

  const int array_size = 4;

  // elemType заменяется на int

  Array<int> ia(array_size);

  // elemType заменяется на double

  Array<double> da(array_size);

  // elemType заменяется на char

  Array<char> ca(array_size);

  int ix;

  for ( ix = 0; ix < array_size; ++ix ) {

          ia[ix] = ix;

          da[ix] = ix * 1.75;

          ca[ix] = ix + 'a';

  }

  for ( ix = 0; ix < array_size; ++ix )

          cout << "[ " << ix << " ]  ia: "  << ia[ix]

              << "\tca: " << ca[ix]

              << "\tda: " << da[ix] << endl;

  return 0;

}

Здесь определены три экземпляра класса Array:

Array<int> ia(array_size);

Array<double> da(array_size);

Array<char> ca(array_size);

Что делает компилятор, встретив такое объявление? Подставляет текст шаблона Array, заменяя параметр elemType на тот тип, который указан в каждом конкретном случае. Следовательно, объявления членов приобретают в первом случае такой вид:

// Array<int> ia(array_size);

int _size;

int *_ia;

Заметим, что это в точности соответствует определению массива IntArray.

Для оставшихся двух случаев мы получим следующий код:

// Array<double> da(array_size);

int     _size;

double *_ia;

// Array<char> ca(array_size);

int   _size;

char *_ia;

Что происходит с функциями-членами? В них тоже тип-параметр elemType заменяется на реальный тип, однако компилятор не конкретизирует те функции, которые не вызываются в каком-либо месте программы. (Подробнее об этом в разделе 16.8.)

При выполнении программа этого примера выдаст следующий результат:

[ 0 ]  ia: 0    ca: a   da: 0

[ 1 ]  ia: 1    ca: b   da: 1.75

[ 2 ]  ia: 2    ca: c   da: 3.5

[ 3 ]  ia: 3    ca: d   da: 5.25

Механизм шаблонов можно использовать и в наследуемых классах. Вот как выглядит определение шаблона класса ArrayRC:


Содержание  Назад  Вперед





Forekc.ru
Рефераты, дипломы, курсовые, выпускные и квалификационные работы, диссертации, учебники, учебные пособия, лекции, методические пособия и рекомендации, программы и курсы обучения, публикации из профильных изданий