面向对象的程序设计c++第六章模板.ppt

面向对象的程序设计c++第六章模板.ppt

  1. 1、本文档共72页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多

面向对象程序设计

第六章模板

C++Templates;参考资料;内容;问题提出;函数重载;宏定义;;;模板定义;模板是c++语言最强大却最少被使用的特征之一,便于重复利用已经开发好的数据结构和算法,可以提高代码的复用性和开发效率,是通用编程实现方法之一。

在c++中,模板让程序员能够定义一种使用不同类型对象的行为。比方用模板类定义一种链表,那么通过不同的模板参数〔在调用时提供〕,可以生成不同类型的链表

有点像宏,但是宏不是类型平安的,而模板是类型平安的

分函数模板和类模板两种;6.1函数模板

1、数据类型作为参数的背景

例:求绝对值的函数

intabs(intx)

{

returnx0?-x:x;

}

doubleabs(doublex)

{

returnx0?-x:x;

}

特点:算法完全相同,仅仅只是数据类型不同。

(函数重载)

问题:能否以数据类型作为参数,实现通用代码设计。;2、模板

模板是由可以使用任何数据类型的通用代码构成。模板以数据类型作为参数。

模板的定义形式是:

templatetypename标识符

函数定义

说明:

template是关键字,表示定义的是模板。

括起来的是模板的参数,可以有一个或多个。如:

templateclassT

或者:

templateclassT1,classT2;;分析:

编译器调用abs()时,用其实参的类型推导出函数模板的类型参数。

当类型参数的含义确定后,编译器将以函数模板为样板,生成一个函数。

以abs(n)调用为例,编译器将生成一个函数:

intabs(intx)

{

returnx0?-x:x;

};;举例——函数模板;举例1——数组;举例2——矩阵;模板是C++支持参数化的工具

使用类模板使用户可以为类声明一种模式,使类中的某些数据成员、某些成员函数的参数、某些成员函数的返回值能够取任意类型。

类模板的声明形式如下:

template模板参数表

类声明

模板参数表为:

class标识符;如:templateclassT

模板参数表包含上面多项内容时,各项内容以逗号分隔。

模板类的成员函数必须是函数模板;在类模板首部以外的成员函数定义都要以下面的形式开头。

templateclassT

与函数模板相同,类模板只有使用的时候才??具体化为某一种类型

用模板类创立对象的一般形式:

模板模板参数表对象名1,对象名2,…,对象名n;

模板参数表为用逗号分隔的假设干类型标识符或常量表达式构成。;#includeiostream.h

#includestdlib.h

//结构体Student

structStudent

{

intid;//学号

floatgpa;//平均分

};

templateclassT//类模板:实现对任意类型数据进行存取

classStore

{

private:

Titem;//item用于存放任意类型的数据

inthaveValue;//haveValue标记item是否已被存入内容

public:

Store(void);//缺省形式〔无形参〕的构造函数

TGetElem(void);//提取数据函数

voidPutElem(Tx);//存入数据函数

};;//以下实现各成员函数。

//注意:模板类的成员函数,假设在类外实现,那么必须是模板函数

//缺省形式构造函数的实现

templateclassT

StoreT::Store(void):haveValue(0)

{}

//提取数据函数的实现

templateclassT

TStoreT::GetElem(void)

{

//如果试图提取未初始化的数据,那么终止程序

if(haveValue==0)

{

coutNoitempresent!endl;

exit(1);

}

returnitem;//返回item中存放的数据

};//存入数据函数的实现

templateclassT

voidStoreT::P

文档评论(0)

147****4268 + 关注
实名认证
内容提供者

认真 负责 是我的态度

1亿VIP精品文档

相关文档