c第十一章重载与模板.ppt

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

第11章 重载与模板 第11章 重载与模板 11.1 重载 11.2 模板 问题举例——复数的运算 用“+”、“-”能够实现复数的加减运算吗? ——重载“+”、“-”运算符 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 前置单目运算符U重载的设计 如果重载单目运算符U为类的成员函数,使之能够实现表达式U opd,其中opd为A类对象,则应该无形参 经重载后,表达式U opd相当于opd.operator U() 后置单目运算符重载的设计 如果要重载后置++或--为类成员函数,使之能够实现表达式opd++或opd--,其中opd为A类对象,则应具有一个int类型形参,可无参数名字 经重载后,表达式opd++相当于opd.operator ++(0) 重载单目运算符为成员函数 将运算符前置++和后置++重载为复数类的成员函数 规则: 实部和虚部分别加1 操作数: 操作数是复数类的对象 前置和后置的区别 运算符重载友元函数的设计 如果需要重载一个运算符,使之能够用于操作某类对象的私有成员,可将运算符重载为该类的友元函数 函数的形参代表自左至右次序排列的各操作数 后置单目运算符++和--重载函数,形参列表中要增加一个int,但不必写形参名 友元函数的设计 双目运算符B重载后,表达式opd1 B opd2等同于operator B(opd1,opd2) 单目运算符U重载后,表达式 U opd等同于operator U(opd) 后置单目运算符++和--重载后,表达式 opd ++等同于operator ++(opd,0) 重载为友元函数 将双目+、-重载为复数类的友元函数 操作数: 3.6+c2 c1-c2 重载 返回类型必须是引用:因为无论函数返回的是什么,它都会成为下一个运算符的左边的参数,返回cout的当前值以便连续的输出 11.2 模版 1、函数模版 建立一个通用函数,其函数类型和形参类型不具体指定,用一个虚拟的类型来代表,这个通用函数就称为函数模板。 在调用函数时系统会根据实参的类型来取代模板中的虚拟类型,从而实现了不同函数的功能 函数模板例题 2、类模版 类模板声明的形式: template typename T1, typename T2 class 类模板名 { //类模板成员声明; }; 在类模板外定义成员函数的形式: template typename T1, typename T2 函数类型 类模板名T1,T2::函数名(参数表) 用一个模板类建立对象时声明形式: 类模板名int,double 对象; * * 刘传平 中国地质大学(北京) class CComplex { public: CComplex(double r=0.0,double i=0.0) { Real=r; Imag=i; } void display() {coutReal+Imagiendl; } private: double Real; double Imag; }; class CComplex {public: CComplex(double r=0,double i=0); void display(); CComplex operator +(double d);//+重载为成员函数 CComplex operator -(CComplex c2); private: double Real; double Imag; }; void main() { CComplex c1(5,4),c2(2,10),c3; coutc1=; c1.display(); coutc2=; c2.d

文档评论(0)

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

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

1亿VIP精品文档

相关文档