第6章 类 属.ppt

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

第6章 类 属 主讲:王 建 兴 闽江学院物理学与电子信息工程系 第6章 类 属 代码重用是软件设计的重要手段,从函数重用到对象的重用过程就是代码重用技术发展的过程。可以说,是代码重用的需要导致了面向对象的方法学。类属,即C++中的模板是代码重用的一种有效手段。 6.1 类属的机制 有一些程序段,从它们的逻辑功能看,彼此是相同的,所不同的是所要处理的对象(数据)的不同。 【例6-1】 传统的方法实现类属。 【例6-2】 6.2 模板 模板(template)利用一种完全通用的方法来设计函数或类而不必预先说明将被使用的每个对象的类型,利用模板功能可以构造具有共性的函数或类的系列。 6.2.1 函数模板 1、函数模板的定义 【例6-3】 函数模板的一般说明形式如下: template类型形参表 返回值类型 函数名(形参表) { //函数定义体 } 6.2.1 函数模板 1、函数模板的定义 【例6-3】 函数模板的一般说明形式如下: template类型形参表 返回值类型 函数名(形参表) { //函数定义体 } 6.2.1 函数模板 类型形参表又称模板参数,它可以包括一到若干个形参,这些形参既可以是“类型形参”,也可以是“数据形参”。 类型形参是在类模板实例化时传递数据类型用的;“数据形参”的类型是某种具体的数据类型 。 6.2.1 函数模板 #include iostream.h template class T, unsigned long len T Sum(T *arr) { T sum=0; for(int i=0; ilen; i++) { sum+=arr[i]; } return sum; }; void main() { int arr[]={12,34,56,78,90}; coutSumint,5(arr)endl; } 3、定义类成员函数模板 不仅全局函数可以定义为函数模板,普通类和类模板中的成员函数也可以定义为函数模板,只是成员函数模板不能是virtual的,而且函数体须在类中定义,否则调用是会出错。 【例6-7】 6.2.1 函数模板 当程序中说明了一个函数模板后,编译系统发现有一个对应的函数调用时,将根据实参中的类型来确认是否匹配函数模板中对应的形参,然后生成一个重载函数。该重载函数的定义与函数模板的函数定义体相同,称之为模板函数(template function)。 6.2.2 类模板 一个类模板允许用户为类定义一种模式,使得类中的某些数据成员、某些成员函数的参数、某些成员函数的返回值,能取任意类型(包括系统预定义的和用户自定义)。类模板不是一个具体的、实际的类,而是代表着一类类。 6.2.2 类模板 1、类模板的定义 类模板的一般格式为: template类型形参表 class 类模板名 {private: 私有成员定义 protected: 保护成员定义 public: 公有成员定义 }; 6.2.2 类模板 ①类型形参表与函数模板的概念一样。 类模板中成员函数将自动成为函数模板。当类模板中成员函数可以放在类模板的定义体中(此时与类中的成员函数的定义方法一致)定义,也可以放在类模板的外部来定义。 template类型形参表 函数值的返回类型 类模板名类型名表::成员函数(形参) {函数体} 6.2.2 类模板 ③类模板定义只是对类的描述,它本身还不是一个实实在在的类,是类模板。 ④类模板不能直接使用,必须先实例化为相应的模板类,定义模板类的对象(即实例)后,才可使用。方式: 类模板名类型实参表 对象名表; 6.2.2 类模板 6.2.2 类模板 2、数据形参 【例6-9】 4、类模板的派生 从类模板派生类模板。 templatetypename T, … class Derive : public BaseT, … { //… }; 【例6-10】 6.2.2 类模板 4、类模板的派生 从类模板派生非模板类 【例6-11】 templatetypename class Base { //… }; class Derive : public Baseint { //… }; 6.3 标准模板库——STL 使用模板的程序设计就是泛型程序设计。STL是标准的泛型程序。 STL(Standard Template Library,标准模板库)是C++ 标准库中最重要的组成部分。 C++程序员必须掌握STL的使用。 【例9-4】一个使用STL的简单例子。 6.3.2 命名空间(namespace) 命名空间是C++的一种机制,用来把单个标识符下的大量有逻辑联系的程

文档评论(0)

me54545 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档