第7章 重载与模板.ppt_第1页
第7章 重载与模板.ppt_第2页
第7章 重载与模板.ppt_第3页
第7章 重载与模板.ppt_第4页
第7章 重载与模板.ppt_第5页
已阅读5页,还剩15页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、第7章,重载与模板,重载,7.1.1函数重载,如:int max (int x, int y) return ( (xy) ? x: y); double max (double x , double y) return ( (xy) ?x: y); void main( ) coutmax(10,20)endl; coutmax(1.23,2.34)endl; ,()作为重载函数至少在参数个数、参数类型上有所不同。若仅在返回类型上不同,编译器是无法区别的。 如:void func(int); int func(int); /错误,重复声明 int min(int ,int); int min

2、(int,int,int); /正确 int add(int,int); double add(double,double); /正确 ()typedef定义的类型只是给已有类型取另外一个名字,认为是相同类型。 typedef INT int; void func(int x) . void func (INT x) /错误 (3)重载函数一般应具有相同的功能,否则会破坏程序的可读性。,注意事项,问题的提出 如:int x=2,y=3; x=x+y;/x值为5 char *x=a , *y=student; strcat(x,y);/ x值为a student 希望能改造为:x=x+y;更加简

3、单和直观! 因此,需要对“+”进行不同的解释,即:重载,7.1.2 运算符重载,例:定义一个复数类,重载运算符+,使之能完成两复数相加。 *用成员函数实现双目运算符的重载 *用友元函数实现双目运算符的重载,class complex private: float real, image; public: complex (float r=0, float i=0) real =r; image =i; void show() cout real +imageiendl; complex operator + (complex ,void main() complex c1(2,3),c2(4,

4、7),c3; coutc1=; c1. show(); coutc2=; c2. show(); c3=c1+c2; coutc3=c1+c2 =; c3. show(); ,输出结果: c1=2+3i c2=4+7i c3=c1+c2 =6+10i,operator是关键字,参数有且仅有一个,运算符左边的对象是调用该运算符重载函数的对象,c1+c2相当于c1.operator +(c2),*用成员函数实现双目运算符的重载,class complex private: float real, image; public: complex (float r=0, float i=0) real

5、=r; image =i; void show() cout real +imageiendl; friend complex operator+(complex ,void main() complex c1(2,3),c2(4,7),c3; coutc1=; c1.show(); coutc2=; c2.show(); c3=c1+c2; coutc3=c1+c2 =; c3.show(); ,输出结果: c1=2+3i c2=4+7i c3=c1+c2 =6+10i,*用友元函数实现双目运算符的重载,class Tcount private: int Hour,Minute,Second

6、; public: Tcount() Hour=Minute=Second=0; Tcount(int h,int m,int s) Hour=h;Minute=m;Second=s; void show() coutHour:Minute:Secondendl; Tcount operator+() /前置+的重载函数 Second+; /先加 if(Second=60) Second=0; Minute+; if(Minute=60) Minute=0; Hour+; if(Hour=24)Hour=0; return *this; /后取值 ,*用成员函数实现单目运算符的重载,Tcoun

7、t operator+(int) /后置+的重载函数 Tcount temp=*this;/先取值 Second+; /后加 if(Second=60) Second=0; Minute+; if(Minute=60) Minute=0; Hour+; if(Hour=24)Hour=0; return temp; ; void main() Tcount t1(20,59,59),t2,t3; coutt1=; t1.show(); t2=+t1; cout执行t2=+t1后,endlt1=; t1.show(); coutt2=; t2.show(); t3=t1+; coutendl接着

8、执行t3=t1+后,endlt1=; t1.show(); coutt3=; t3.show(); ,*用友员函数实现单目运算符的重载,函数原型: friend Tcount operator+(Tcount /后置+的友元重载函数,大多数系统预定义运算符都能重载,除开以下: . : ?: # *(当乘法运算符时可重载) “.” “:” “*”在C+中有特定定义 “?:”不值得重载 “#”不是运算符 重载时的注意事项: (1)不能改变优先级; (2)不能改变结合性; (3)不能改变运算符所需操作数的个数; (4)重载后,可按这些运算符的表达方式使用。,模板,7.2.1 函数模板,1函数模板的定

9、义 函数模板的定义为: template (形参表) /函数定义体 ,由class或typename后加一个标识符构成,【例7.13】函数模板的说明,template Glorp min( Glorp a, Glorp b ) return a b ? a : b; 注意:对函数模板的说明和定义必须是全局作用域,函数模板不能说明为类的成员函数,2函数模板的实例化,在函数模板中,函数模板只是说明,不能直接执行,需要实例化为模板函数后才能执行。当编译系统发现一个函数调用时,将根据实参表中的类型生成一个重载函数即模板函数。,【例7.14】函数模板的实例化,#include template A fa

10、b(A x) return x=0?x,-x; void main() int i=5; double y=-5.4; cout”整数的绝对值”fab(i)endl; cout”实数的绝对值”fab(y)endl; ,7.2.2 类模板,1类模板的定义 template class /类说明体 template :(形参表) /成员函数定义体 template :(形参表) /成员函数定义体 。 template :(形参表) /成员函数定义体 ,【例7.15】设计一套完整的算术运算来补充add函数。,template class CCalculator public: CCalculator(const T ,2类模板的实例化,类模板不能直接使用,必须实例化为

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论