泛型设计(1)

IntArray 类为预定义的整型数组类型提供了一个有用的替代类型。如果用户希望使用一

个double 或string 类型的数组,那该怎么办呢?实现一个double 类型的数组与IntArray 类的

区别只是在其所包含的元素的类型不同,而代码本身无需改变。

C++的模板设施提供了一种机制,它能够将类成函数定义内部的类型和值参数化。

parameterizing 我们要到10.1 节才会讨论值参数,这些参数在其他方面不变的代码中

用作占位符,以后这些参数会被绑定到实际类型上,可能是内置的类型也可能是用户定

义的类型。例如在Array 类模板中,我们把数组所包含的元素的类型参数化以后,当我

们实例化instantiate 一个特定类型的实例时,如int、double 或string 类型的Array 数组,

就可以在程序中直接使用这三个实例,就好像我们已经显式地为它们编写过代码一样。现在

来看一下怎样把IntArray 类转换成Array 类模板。下面是定义

template < class elemType >

class Array {

public:

// 把元素类型参数化

explicit Array( int size = DefaultArraySize );

Array( elemType *array, int array_size );

Array( const Array &rhs );

virtual ~Array() { delete [] ia; }

bool operator==( const Array& ) const;

bool operator!=( const Array& ) const;

Array& operator=( const Array& );

int size() const { return _size; }

virtual elemType& operator[](int index){ return ia[index]; }

virtual void sort();

virtual elemType min() const;

virtual elemType max() const;

virtual int find( const elemType &value ) const;

protected:

static const int DefaultArraySize = 12;

int _size;

elemType *ia;

};

关键字template 引入模板参数由一对尖括号< > 括起来——本例中有一个参数

elemType 关键字,class 表明这个参数代表一个类型标识符,elemType 代表实际的参数名。

它在Array 类定义中出现了七次,都是作为实际类型的占位符。

在Array 类的每次实例化中,不论是实例化为int、double 或string 等等,实例化的实际

类型都将代替elemType 参数,下面的例子演示了怎样使用Array 类模板

#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;

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值