Использование шаблонов - часть 4
{
Array<int> ia1;
ArrayRC<int> ia2;
cout << "swap() with Array<int> ia1" << endl;
int size = ia1.size();
swap( ia1, 1, size );
cout << "swap() with ArrayRC<int> ia2" << endl;
size = ia2.size();
swap( ia2, 1, size );
return 0;
}
Упражнение 2.13
Пусть мы имеем следующие объявления типов:
template<class elemType> class Array; |
enum Status { ... };
typedef string *Pstring;
Есть ли ошибки в приведенных ниже описаниях объектов?
(a) Array< int*& > pri(1024); (b) Array< Array<int> > aai(1024); (c) Array< complex< double > > acd(1024); (d) Array< Status > as(1024); |
(e) Array< Pstring > aps(1024);
Упражнение 2.14
Перепишите следующее определение, сделав из него шаблон класса:
class example1 { public: example1 (double min, double max); example1 (const double *array, int size);
double& operator[] (int index); bool operator== (const example1&) const;
bool insert (const double*, int); bool insert (double);
double min (double) const { return _min; }; double max (double) const { return _max; };
void min (double); void max (double);
int count (double value) const;
private: int size; double *parray; double _min; double _max; |
}
Упражнение 2.15
Имеется следующий шаблон класса:
template <class elemType> class Example2 { |
public:
explicit Example2 (elemType val=0) : _val(val) {};
bool min(elemType value) { return _val < value; }
void value(elemType new_val) { _val = new_val; }
void print (ostream &os) { os << _val; }
private:
elemType _val;
}
template <class elemType>
ostream& operator<<(ostream &os,const Example2<elemType> &ex)
{ ex.print(os); return os; }
Какие действия вызывают следующие инструкции?