17类模板讲解_精品.pptxVIP

  1. 1、本文档共22页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
1、类模板的定义2、类模板应用举例17.1 类模板的定义? 例如有如下类:class Compare_int{public :Compare(int a,int b){x=a;y=b;}//构造函数 float max(){return (xy)?x:y;}//求最大值 float min(){return (xy)?x:y;}//求最小值private :int x,y;}17.1 类模板的定义? 及如下类:class Compare_double{public :Compare(double a,double b){x=a;y=b;}//构造函数 float max(){return (xy)?x:y;}//求最大值float min(){return (xy)?x:y;}//求最小值 private :double x,y;}? 如何避免大量重复工作?17.1 类模板的定义? 就像可以定义函数模板一样,也可以定义类模板。其定义的一般形式为:template 模板形参表class 类模板名 {//类体成员列表};? 类模板必须以关键字template开头,后接模板形参表。模板形参表是用一对尖括号 括住的一个或多个模板形参的列表,不允许为 空,形参之间以逗号分隔。其一般形式为:class 类型参数1, class 类型参数2, ...... 17.1 类模板的定义? 模板形参表用于表示可以在类定义中使用的数据类型。类型形参跟在关键字class或typename之后定义,如class T是名为T的类型形参, 在这里class和typename没有区别。一般地,类模板习惯用class,函数模板习惯用typename。? 除了模板形参列表外,类模板的定义与类定义相似。类模板可以定义数据成员和函数成员,也可以使用访问标号控制对成员的访问, 还可以定义构造函数和析构函数等等。在类和类成员的定义中,可 以使用模板形参作为类型或值的占位符,在使用类时再提供那些类 型或值的具体信息。17.1 类模板的定义? 由于类模板包含类型参数,因此又称为参数化的类。如果说类是对象的抽象,对象是类的实例,则类模板是类的抽象,类是类模板的 实例。利用类模板可以建立支持各种数据类型的类。17.1 类模板的定义? 例如定义一个类模板表示平面上的点:template class T //类模板定义 class Point { //Point不是类名是模板名 public:Point() : x(0), y(0) { } //默认构造函数Point(const T a, const T b) : x(a), y(b) { } //带参数构造函数 void Set(const T a, const T b);void Display(){ coutDisplay: x=x,y=yendl; } private:T x, y;};17.1 类模板的定义? 如果在类模板外部定义成员函数,形式为:template 模板形参表返回类型 类名类型参数表::函数名(形式参数列表){函数体}? 例如:template class Tvoid PointT::Set(const T a, const T b){x=a , y=b;}17.1 类模板的定义? 用类模板定义对象时,必须为模板形参显式指定类型实参,一般形式为:类模板名类型实参表 对象名列表;类模板名类型实参表 对象名1(实参列表1), 对象名2(实参列表2),......;? 例如:Point int a, b; //定义类模板对象,调用默认构造函数Point double m(1,2), n(3,4); //定义类模板对象,调用带参数构造函数17.1 类模板的定义? 模板形参表还可以是非类型形参,其形式与函数形参表相似。例如:template class T, int Nclass Sequence { //Sequence类模板 public:void Set(int i, T value);T Get(int i) { return array[i]; } private:T array[N];};template class T, int Nvoid SequenceT,N::Set(int i, T value){ array[i]=value; }17.1 类模板的定义? 当定义类模板对象时,必须为每个非类型形参提供常量表达式以供使用。例如:Sequenceint,5 a;//提供类型和常量表达式Sequencedouble,5b;//提供类型和常量表达式for(i=0;i5;i++)a.Set(i,i);//给a的数组成员赋值for(i=0;i5;i++)couta.Get(i);//输出数组成员的值

文档评论(0)

有谱教育资源分享 + 关注
实名认证
文档贡献者

热爱生活,分享教育专业文档! 所有资料均来源于互联网公开下载资源,如有侵权,请联系管理员及时删除。

1亿VIP精品文档

相关文档