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

下载本文档

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

文档简介

第11章 重载与模板,第11章 重载与模板,11.1 重载 11.2 模板,问题举例复数的运算,用“+”、“-”能够实现复数的加减运算吗? 重载“+”、“-”运算符,class CComplex public: CComplex(double r=0.0,double i=0.0) Real=r; Imag=i; void display() coutReal“+“Imag“i“endl; private: double Real; double Imag; ;,11.1 重载,只能重载已有运算符,可重载C+中除下列运算符外的所有运算符:. -: ?: sizeof 不能改变原运算符的优先级和结合性,不能改变操作数个数 经重载的运算符,其操作数中至少应该有一个是自定义类型 重载运算符的函数不能有默认的参数 用于类对象的运算符一般必须重载,但有两个例外, “=”和“&”不必重载,运算符重载函数,函数类型 operator 运算符(形参) 重载为类成员函数时,参数个数=原操作数个数-1(后置+、-除外) 重载为友元函数时,参数个数=原操作数个数,且至少应该有一个自定义类型的形参,双目运算符B重载的设计,如果要重载B为类成员函数,使之能够实现表达式opd1 B opd2,其中opd1为A类对象,则形参类型应该是opd2所属的类型 经重载后,表达式opd1 B opd2相当于opd1.operator B(opd2),例题,将双目“+”、“-”运算符重载为复数类的成员函数 操作: c1+5 c1-c2,class CComplex public: CComplex(double r=0,double i=0); void display(); CComplex operator +(double d);/+重载为成员函数 CComplex operator -(CComplex ,/一个复数与一个实型数据相加的成员函数 CComplex CComplex:operator +(double d) CComplex c; c.Real=Real+d; c.Imag=Imag; return c; /两个复数相减的成员函数 CComplex CComplex:operator -(CComplex ,前置单目运算符U重载的设计,如果重载单目运算符U为类的成员函数,使之能够实现表达式U opd,其中opd为A类对象,则应该无形参 经重载后,表达式U opd相当于opd.operator U(),后置单目运算符重载的设计,如果要重载后置+或-为类成员函数,使之能够实现表达式opd+或opd-,其中opd为A类对象,则应具有一个int类型形参,可无参数名字 经重载后,表达式opd+相当于opd.operator +(0),重载单目运算符为成员函数,将运算符前置+和后置+重载为复数类的成员函数 规则: 实部和虚部分别加1 操作数: 操作数是复数类的对象,class CComplex public: CComplex(double r=0.0,double i=0.0); void display(); CComplex ,前置和后置的区别,CComplex ,运算符重载友元函数的设计,如果需要重载一个运算符,使之能够用于操作某类对象的私有成员,可将运算符重载为该类的友元函数 函数的形参代表自左至右次序排列的各操作数 后置单目运算符+和-重载函数,形参列表中要增加一个int,但不必写形参名,友元函数的设计,双目运算符B重载后,表达式opd1 B opd2等同于operator B(opd1,opd2) 单目运算符U重载后,表达式 U opd等同于operator U(opd) 后置单目运算符+和-重载后,表达式 opd +等同于operator +(opd,0),重载为友元函数,将双目+、-重载为复数类的友元函数 操作数: 3.6+c2 c1-c2,class CComplex friend CComplex operator +(double r,CComplex ,/一个实型数据与一个复数相加的友元函数 CComplex operator +(double d,CComplex ,重载,返回类型必须是引用:因为无论函数返回的是什么,它都会成为下一个运算符的左边的参数,返回cout的当前值以便连续的输出,friend ostream,11.2 模版,1、函数模版 建立一个通用函数,其函数类型和形参类型不具体指定,用一个虚拟的类型来代表,这个通用函数就称为函数模板。 在调用函数时系统会根据实参的类型来取代模板中的虚拟类型,从而实现了不同函数的功能,函数模板例题,#include template T max(T a,T b) return ab?a:b; void main( ) int i1=185,i2=-76; double d1=56.87,d2=90.23; cout“i_max=“max(i1,i2)endl; cout“d_max=“max(d1,d2)endl; ,可用class代替,2、类模版,类模板声明的形式: template class /类模板成员声明; ; 在类模板外定义成员函数的形式: template 函数类型 类模板名:函数名(参数表) 用一个模板类建立对象时声明形式: 类模板名 对象;,可用class代替,template class CPlus public: CPlus(); P plus(); T m; P n; ; template CPlus:CPlus() template P CPlus:plus() P s; s=(P)(m+n)

温馨提示

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

评论

0/150

提交评论