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


         

ведет себя точно так же,


#include <cassert>

#include "Array.h"

template <class elemType>

class ArrayRC : public Array<elemType> {

public:

    ArrayRC( int sz = DefaultArraySize )

            : Array<elemType>( sz ) {}

    ArrayRC( const ArrayRC& r )

            : Array<elemType>( r ) {}

    ArrayRC( const elemType *ar, int sz )

            : Array<elemType>( ar, sz ) {}

    elemType& ArrayRC<elemType>::operator[]( int ix )

    {

        assert( ix >= 0 && ix < Array<elemType>::_size );

        return _ia[ ix ];

    }

private:

// ...

};

Подстановка реальных параметров вместо типа-параметра elemType происходит как в базовом, так и в производном классах. Определение

ArrayRC<int> ia_rc(10);

ведет себя точно так же, как определение IntArrayRC из предыдущего раздела. Изменим пример использования из предыдущего раздела. Прежде всего, чтобы оператор

// функцию swap() тоже следует сделать шаблоном

swap( ia1, 1, ia1.size() );

был допустимым, нам потребуется представить функцию swap() в виде шаблона.

#include "Array.h"

template <class elemType>

inline void

swap( Array<elemType> &array, int i, int j )

{

  elemType tmp = array[ i ];

  array[ i ] = array[ j ];

  array[ j ] = tmp;

}

При каждом вызове swap() генерируется подходящая конкретизация, которая зависит от типа массива. Вот как выглядит программа, использующая шаблоны Array и ArrayRC:

#include <iostream>

#include "Array.h"

#include "ArrayRC.h"

template <class elemType>

inline void

swap( Array<elemType> &array, int i, int j )

{

  elemType tmp = array[ i ];

  array[ i ] = array[ j ];

  array[ j ] = tmp;

}

int main()

{

  Array<int>   ia1;

  ArrayRC<int> ia2;

  cout << "swap() with Array<int> ia1" << endl;

  int size = ia1.size();

  swap( ia1, 1, size );


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





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