




已阅读5页,还剩32页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第五章第五章 运算符重载及多态运算符重载及多态 吴良杰吴良杰 harbin engineering universityharbin engineering university 哈尔滨工程大学课件 运算符重载运算符重载实例实例 复数的运算复数的运算 class complexclass complex public:public: complex(doublecomplex(double r=0.0,double i=0.0) r=0.0,double i=0.0) real=r; real=r; imagimag=i; =i; void display()void display() coutcout class complexclass complex public:public: complex(doublecomplex(double r=0.0,double i=0.0) r=0.0,double i=0.0) real=real=r;imagr;imag=i;=i; complex operator + (complex c2); complex operator + (complex c2); complex operator - (complex c2); complex operator - (complex c2); void display() void display() coutcout=60)=60) second=second-60; second=second-60; minute+; minute+; if(minuteif(minute=60)=60) minute=minute-60; minute=minute-60; hour+; hour+; hour=hour%24; hour=hour%24; return *this; return *this; 哈尔滨工程大学课件 运算符重载运算符重载重载为成员函数重载为成员函数 clock clock clock:operatorclock:operator +( +(intint) ) clock old=*this;clock old=*this; +(*this); +(*this); return old; / return old; /后置自增表达式的值是变量的原值后置自增表达式的值是变量的原值 。 哈尔滨工程大学课件 运算符重载运算符重载重载为成员函数重载为成员函数 void main()void main() clock myclock(23,59,59); clock myclock(23,59,59); / /定义对象定义对象 coutcout class comclass com public:public: com (double r=0.0,double i=0.0)com (double r=0.0,double i=0.0) real=r; real=r; imagimag=i; =i; friend com operator +friend com operator + (com c1,com c2); (com c1,com c2); friend com operator -friend com operator - (com c1,com c2); (com c1,com c2); void display();void display(); private:private: double real;double real; double double imagimag; com operator +com operator +(com c1,com c2)(com c1,com c2) return com(c2.real+c1.real, c2.imag+c1.imag); return com(c2.real+c1.real, c2.imag+c1.imag); com operator -com operator -(com c1,com c2)(com c1,com c2) return com(c1.real-c2.real, c1.imag-c2.imag);return com(c1.real-c2.real, c1.imag-c2.imag); 哈尔滨工程大学课件 运算符重载运算符重载重载为友元函数重载为友元函数 void void com:displaycom:display() () coutcout class b0class b0 public:public: void void displaydisplay() () coutcoutdisplay(); pb0= pb0-display(); pb0= pb0-display(); 运行结果: b0:display() b0:display() b0 :display() 哈尔滨工程大学课件 虚函数虚函数 问题:问题: 如何通过如何通过基类指针基类指针访问派生类中访问派生类中同名同名的成员函的成员函 数?数? 解决方法:解决方法: 使用 使用虚函数虚函数。 什么是虚函数?什么是虚函数? 一个类的非静态成员函数。 一个类的非静态成员函数。 声明时使用 声明时使用virtualvirtual关键字限定。关键字限定。 哈尔滨工程大学课件 虚函数虚函数 声明声明 virtual virtual 返回值类型返回值类型 函数名函数名( (参数表参数表) ) 函数体 函数体 说明说明 virtualvirtual只能出现在函数声明语句中,只能出现在函数声明语句中, 不能出现在实现时。 不能出现在实现时。 哈尔滨工程大学课件 虚函数虚函数 #include class b0class b0 public:public: virtualvirtual void void displaydisplay() () coutcoutdisplay(); pb0= pb0-display(); pb0= pb0-display(); 运行结果: b0:display() b1:display() d1:display() 哈尔滨工程大学课件 虚函数虚函数 虚函数特点:虚函数特点: 当一个类的某个成员函数被声明为当一个类的某个成员函数被声明为虚函数虚函数,则由,则由 该类派生出来的所有该类派生出来的所有派生类派生类中,该函数始终保持中,该函数始终保持 虚函数的特征。虚函数的特征。 使用要点使用要点 当在派生类中重新定义虚函数时,不必加关键字当在派生类中重新定义虚函数时,不必加关键字 virtualvirtual。但重新定义时不仅要。但重新定义时不仅要同名同名,而且它的,而且它的参参 数表和返回类型数表和返回类型全部与基类中的虚函数一样,否全部与基类中的虚函数一样,否 则出错。则出错。 哈尔滨工程大学课件 虚函数虚函数虚析构函数虚析构函数 n n 何时需要虚析构函数?何时需要虚析构函数? 当通过当通过基类指针基类指针删除删除派生类派生类对象时对象时 通过基类指针调用对象的析构函数,并且被析构通过基类指针调用对象的析构函数,并且被析构 的对象是有重要的析构函数的派生类的对象,就的对象是有重要的析构函数的派生类的对象,就 需要让基类的析构函数成为虚拟的。需要让基类的析构函数成为虚拟的。 哈尔滨工程大学课件 模板模板 问题:为什么要使用模板?问题:为什么要使用模板? 举例:计算两个整型数的加法和举例:计算两个整型数的加法和 两个实型数加法。两个实型数加法。 解决方法:函数重载解决方法:函数重载 缺点:函数要写再次。缺点:函数要写再次。 如何克服缺点:使用函数模板如何克服缺点:使用函数模板 如一个食品模型,填充不同的原料,得到不同 如一个食品模型,填充不同的原料,得到不同 名称的食品。名称的食品。 哈尔滨工程大学课件 模板模板函数模板函数模板 作用:作用: 创建一个通用功能的函数,以支持多种不同形创建一个通用功能的函数,以支持多种不同形 参,进一步简化重载函数的函数体设计。参,进一步简化重载函数的函数体设计。 声明:声明: templatetemplate 函数声明函数声明 哈尔滨工程大学课件 模板模板函数模板函数模板 #include template t t t sum(tsum(t x,tx,t y,ty,t z) z) return return x+y+zx+y+z; ; template t1 t sum (t x,t1 y)t sum (t x,t1 y) return return x+yx+y; ; void main()void main() coutcout t class storeclass store private: private: t item; t item; intint havevaluehavevalue; ; public:public: store(voidstore(void); ); t t getelem(voidgetelem(void); ); void void putelem(tputelem(t x); x); ; ; 哈尔滨工程大学课件 模板模板类模板类模板 template template storestore: :store(voidstore(void): havevalue(0) ): havevalue(0) template template t storet store: :getelem(voidgetelem(void) ) if (if (havevaluehavevalue = 0) = 0) coutcout template void storevoid store: :putelem(tputelem(t x) x) havevaluehavevalue+; +; item = x; item = x; 哈尔滨工程大学课件 模板模板类模板类模板 void void main(voidmain(void) ) store s1, s2; s1, s2; store d; store d; s1.putelem(3); s1.pute
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025草坪修剪项目政府采购与生态修复合同
- 2025叉车租赁合同协议-仓储物流设施升级改造
- 2025版商场档口租赁合同(含品牌形象维护责任)
- 2025年泰州二手房买卖合同+智能家居设备安装服务合同
- 2025版智能通风排烟系统安装与能源审计合同样本
- 2025年度智能安防系统采购意向协议书
- 2025年大学兼职教师合作开发与成果转化协议
- 2025版核能设备监造与核安全防护合同
- 2025版农业合作社股权变更与乡村振兴战略实施协议
- 2025版房地产开发企业委托反担保合同范本
- 2025办公室租赁合同简易范本下载
- 定向增发业务培训
- 2025年初级美容师理论知识复习资料试题及答案
- 餐饮店长转正汇报
- 2025年贵州省中考语文试卷(含答案与解析)
- 2025年广东省中考语文试卷(含答案解析)
- 2025年昆山校医考试题库
- 8-教育系统-安全生产治本攻坚三年行动工作方案及台账模板(2024-2026年)
- 2025年云南高考历史试卷解读及备考策略指导课件
- 2025至2030中国纤维素纳米纤维(CNF)行业项目调研及市场前景预测评估报告
- (高清版)T∕CES 243-2023 《构网型储能系统并网技术规范》
评论
0/150
提交评论