




已阅读5页,还剩50页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第五章 多态性和虚函数5.1 多态性(polymorphism)的定义(一)定义:多态性 - 能够呈现不同形态的特性或状态。polymorphism - the quality or state of being able to assume different forms。 (摘自 Webster 词典)(二)两种多态性1编译时的多态性:亦称静态联编(束定)(static binding)或早期联编(early binding)。即本章中前半部分将要讲述的函数和运算符函数 的重载功能。编译系统进行编译时在函数调用指令表中找到多个重载的函数中相对应的那个函数(即形参的数量和类型完全匹配的那个函数) ,将它们与主程序中调用它们的代码联编(binding) ,以供主程序运行时正确地调用。在 C中这表现为“行为共享”(例如同名函数实现不同功能) ,或称“同一接口,多种方法”。2所谓运行时的多态性:亦称所谓动态联编(束定)(dynamic binding)或滞后联编(late binding) 。编译系统进行编译时,根据程序代码内容、根据虚函数地址表中 this 指针所指向的地址、找到相应的虚函数,将它与主程序中调用它的代码联编(binding),以供主程序在运行中调用它(本章后半部分将详细讲解,它实质上仍然是静态联编) 。5.2 函数重载(overloading)5.2.1 普通函数的重载C 语言中一个函数只能处理一个类型的数据,或者只能处理整型数据,或者只能处理浮点型数据。不可能兼顾两种或多种数据类型。能否使用同一名称的函数来处理多个类型的数据?这可以在面向对象程序设计语言中解决。在C中可用一个名称的函数例如 sq( )来处理所有参数类型的平方,例子如下。例 1平方函数的重载:两个单形参的重载函数/ overld_fun1.cpp/overloading of functions#include double sq(double y)return y*y;int sq(int y)return y*y;void main()int i=5;double d=5.5;std:cout#include int max(int x, int y)return xy? x: y;double max(double x, double y)return xy? x: y;char* max(char* x, char* y)return strcmp(x, y)0? x: y;void main()std:coutint fun(int y)return y;void fun(int y)+y;/ error: void fun(int) : overloaded function differs/ only by return type from int fun(int)/ error: fun : redefinition; different basic typesvoid main()int i=5;std:cout#include /包含 atoi(p)的函数原型class timerint seconds;public:timer( ); /零形参构造函数timer(int); /单个形参构造函数timer(int, int); /双形参构造函数timer(char *); /字符形参构造函数int gettime( );timer:timer( ) /零形参构造函数 seconds = 0; timer:timer(int t) /单个形参构造函数 seconds = t; timer:timer(int min, int sec) /双形参构造函数 seconds = min * 60 + sec; timer:timer(char *p) /字符形参构造函数 seconds = atoi(p); int timer:gettime( ) return seconds; void main()timer t1, t2(56), t3(1, 18), t4(“123“);std:coutclass Aint a, b;public:A( );A(int i, int j);A( );void Set(int i, int j)a=i; b=j;A:A( )a=b=0;std:coutclass A int X, Y;public:A ( ) X = 0; Y = 0;std:coutclass pointint x, y;public:point (int vx=0, int vy=0) x = vx; y = vy; friend point operator + (point friend point operator - (point void print() std:coutclass complex double real, imag; /复数的实数和虚数部分public:complex ( double r, double i) real = r; imag = i; complex ( ) real = 0; imag = 0; void print( );friend complex operator + (complex /plusfriend complex operator - (complex /minus;void complex:print( )std:cout0) std:coutclass pointint x, y;public:point() x = 0; y = 0; point (int vx, int vy) x = vx; y = vy; point operator + (point point operator - (point void print() std:coutx + p.x;temp.y = y + p.y;return temp;point point:operator -(point temp.x = x - p.x;temp.y = y - p.y;return temp;void main()point p1(10,10), p2(20,20), p3;p3.print();p3 = p1 + p2; /即 p3 = p1.operator + (p2);p3.print();p3 = p3 - p1; /即 p3 = p3.operator - (p1);p3.print();/* Results:0 030 3020 20*/此处“operator ”已是成员函数,p 是它的实参,也是此运算符的操作数。但表现形式和普通函数不同。实际上“p1+p2 运算”是如下的函数调用:p1.operator +(p2)位于重载运算符函数左面的是调用该运算符的对象,而运算符右面的对象是该运算符的实参。因此,作为类的成员函数的运算符的形参数目比它的操作数少一个。再重复以前提到的:根据什么来区别预定义的加法运算符和重载的加法运算符呢?唯一的根据是操作数的类型。预定义的加法运算符的操作数是预定义的数据类型,而重载的加法运算符的操作数则是类的对象。5.3.1.3 处理字符串的运算符重载字符串的运算有其特殊性,须要特殊处理。现看两个情况:求字符或字符串最大值;将两个字符串衔接起来。(一)求两个字符或两个字符串的最大值:C 语言中已有库函数 int strcmp (char* str1,char* str2); 用于将两个字符串 str2 与 str2 进行比较,并将比较结果写入整型返回值中。例 1求两个字符或两个字符串的最大值/ overld_str_10.cpp/ see the difference between overloaded functions used for/ determining the max value of two chars or two char strings#include #include char max(char ch1, char ch2)return ch1ch2?ch1:ch2;char* max(char* str1, char* str2)int flag = strcmp(str1, str2);return flag=0 ? str1 : str2; /根据返回值来确定最大值void main()char str1 = “OK“;char str2 = “Right“;char data1 = C;char data2 = S;std:cout#include class strc
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年工程师入职考试模拟题集机电工程专业知识
- 2025年医生中级专业面试问题及答案
- 2025年国际贸易实务初级模拟题集
- 【教案版】小学六班级上册 软式排球3
- 2025年财务管理实务操作面试技巧与预测题
- 中班找梦教学课件
- 2025年烈士纪念场所工作人员岗位胜任力面试题及参考答案
- 2025年初中体育教师招聘考试高频考点预测题
- 2025年酒店行业招聘考试模拟题及面试技巧指南手册
- 儿童彩铅教学课件
- 2025新版企业员工劳动合同范本
- 2025年全国版图知识竞赛(中学组)历年参考题库含答案详解(5卷)
- 口才与演讲训练教程(第四版)课件2-2普通话训练
- 新教师三年职业成长规划
- 理化检测员考试题及答案
- 2026届张家港市达标名校中考语文模试卷含解析
- 应急疏散培训课件
- 广东省深圳市福田片区2025届数学七上期末质量检测试题含解析
- 灵芝孢子油培训
- 2025安徽医科大学辅导员考试试题及答案
- 中国肥胖及代谢疾病外科治疗指南(2024版)解读
评论
0/150
提交评论