Essential c++ 第六章练习及类模板template class 知识点

本文详细介绍了C++中的类模板使用,包括模板的定义、typename关键字的应用、常量表达式作为模板参数以及成员模板函数的概念。同时,通过实例解析了如何将类转换为类模板,强调了在模板类中使用传址方式处理参数的重要性。此外,讨论了使用new和delete表达式管理动态内存以及在矩阵类Matrix中应用模板来支持任意行列大小的实现,内存的分配和释放应在构造/析构函数中完成。
摘要由CSDN通过智能技术生成

知识点
1、类模板形式 template< typename elemType> class T ,其中typename可以替换为class,写成template< class elemType> class T。 调用形式:T< string>t1

2、typename:用在模板定义里,标明其后的模板参数是类型参数。

3、常量表达式与默认参数值:Template的参数并不是非得某种类型不可,也可以用常量表达式(constant expression)作为参数。例如,template<int a,int b=1>class T,调用时为 T<32,1> t2.

4、Member Template Function(成员模板函数),即将类的成员函数定义成Template形式,其中类可以是普通类,也可以模板类。

5、new表达式和delete表达式:用以管理内存分配和释放。primer 12.1.2节详解。new返回一个指针,delete接收一个指针。

练习6.1

试改写以下类,使之成为一个class template:

class example{
   
public:
	example(double min, double max);
	example(const double *array, int size);
	double& operator[](int index);
	bool operator==(const example&) const;
	bool insert(const double*, int);
	bool insert(double);
	double min() const {
    return _min; }
	double max() const {
    return _max; }
	void min(double);
	void max(double);
	int count(double value) const;
private:
	int size;
	double *parray;
	double _max;
	double _min;
};

解:要将某个class转换为一个class template,我们必须找出所有和类型相关的部分,并且剥离出来。本例中,_size 的类型是int,用户会不会指定为其他类型呢?不会,因为 size用来记录 _parray所指数组的元素个数,其类型不会变动。至于_parray,就有可能指向不同类型的元素,如int ,double,float,string等,因此必须将_parray,_min,_max这些数据类型予以参数化。
由于elemType 现在可能被用来表现内置类型或class类型,因此以传址(by reference)方式而非传值(by value)方式比较好

template <typename elemType>
class example{
   
public:
	example(const elemType &min, const elemType &max);
	example(const elemType *array, int size);
	elemType& operator[](int index);
	bool operator==(const example&) const;
	bool insert(const elemType*, int);
	bool insert(const elemType&);
	elemType min() const {
    return _min; }
	elemType max() const {
    return _max; }
	void min(const elemType&);
	void max(const elemType&);
	int count(const elemType &value) const;
private:
	int size;
	elemType *parray
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值