- 1、本文档共37页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第七章多态性与虚函数
第七章 多态性与虚函数 ;本章内容;7.1 多态性; 讨论:从实现时机方面讲,多态性可以分为静态多态性和动态多态性两种。
?静态多态性是指可在编译期间确定的多态性。通 常称为静态联编(static binding)。重载多态和参数多态一般是静态多态的。
?动态多态性是指在程序在运行过程中,才能确定的多态性。通常称为动态联编(dynamic binding)。包含多态和强制多态一般是动态联编的。
;运算符重载使程序员可以为自定义的新类型将已有的运算符赋予新的专门含义。
不可重载的运算符
? “?” 圆点运算符
? “?*” 成员指针选择运算符
? “∷” 域分辨运算符
? “?:” 条件运算符
? “sizeof” 长度运算符
除以上五个运算符外,其余运算符均可重载?;重载运算符的规则:
?只能重载C++中已有的可重载的运算符,不能建立新的运算符;
?重载运算符时不能改变原运算符操作数的个数、原有运算符的优先级和结合性,也不能改变原运算符对于内部基本类型对象的含义;
?如果重载了某个运算符(如“=”),并不意味着重载了相关的运算符(如“+=”、“-=”等);
;运算符重载的本质 : 是一种特殊函数的重载。C++将各种运算符都处理成一个函数调用。如表达式“5+7”将被解释成operator+(5,7)
算符重载函数的实现 :
可以利用成员函数和友元函数实现运算符的重载。 ; 将运算符重载函数说明为类的成员函数的格式如下:
class 类名 {
......
返回类型 operator运算符(形参表);
......
};;例:利用成员函数实现两个复数相加运算?;程序说明:
成员函数
complex operator+
(const complex a)
用于定义“+”运算符重载
复数类对象相加c1+c2,相当于c1.operator+(c2); 当main( )执行 c3=c1+c2 时,编译系统自动把c1作为隐含参数并通过this指针隐含传递,而c2作为显式参数传给a?因此,real+a.real和imag+a.imag中的real和imag为隐含参数c1的数据成员,a.real和a.imag为显式参数c2的数据成员?即:
real+a.real?this-real+a.real?c1.real+c2.real
imag+a.imag?this-imag+a.imag?c1.imag+c2.imag; 将运算符重载函数说明为类的友元函数的格式如下。
class 类名 {
......
friend 返回类型 operator运算符(形参表);
......
};; 由于友元函数被调用时没有隐含指向当前对象的this指针作实参,所以,一个一元运算符重载为类的友元函数时,其参数个数为1,一个二元运算符重载为类的成员函数时,其参数个数必须为2。;;; 注意:
该例题将“+” 重载为友元函数?由于友元函数不是类的成员函数,不能使用this指针指向的隐含参数,因此友元函数operator+( ) 必须有两个参数。; 小结:
? 对单目运算符,当以成员函数形式重载运算符时没有参数,以友元函数形式重载运算符时有一个参数;
? 对双目运算符,当以成员函数形式重载运算符时有一个参数;以友元函数形式重载运算符时有两个参数;
; 两种重载形式的比较:
?对于单目运算符,常常选择用成员函数;对于运算符“=?()?[]、-”只能选择用成员函数;对于复合赋值运算符“+=、-=、/=、*=”等常常选择用成员函数。
?对于其他运算符,如“+、-、*、/”等常常选择用友元函数,以适应更多的计算形式?; 例如,对于复数类对象相加来说, 用友元函数实现时,表达式4.5+c1可以正确计算,将被解释成operator+(complex(4.5),c1)。
而用成员函数实现时, 表达式4.5+c1将是一个错误的表达式,因为若将以上加法重载为成员函数时,表达式4.5+c1将被解释为4.5.operator+(c1),而4.5是一个基本类型的常数,不能自动转换为复数类对象。;7.3 虚函数;;;;7.3 虚函数;7.3 虚函数;例:动态联编示例。;class Circle:public Point{
double radius; //增加新成员半径
public:
Circle(double r,double i,double j):Point(i,j),radius(r){}
virtua
您可能关注的文档
- 第9章统计指数习题答案.pptx
- 第9章消费心理与消费者行为.ppt
- 第9章组织行为与人事管理.ppt
- 第9章组织外部沟通.ppt
- 第9章行政单位资产负债的核算.ppt
- 第9章物流服务绩效管理.ppt
- 第9章设备的运行期资产备件管理3.ppt
- 第9章职业社交的素质拓展.ppt
- 第9章购货与付款循环审计.ppt
- 第9章营销沟通与消费心理.ppt
- 2023年度安全员考试题库检测试题打印附答案详解(达标题).docx
- 2023年度安全员考试题库检测试题打印(实用)附答案详解.docx
- 2023年度安全员考试题库检测试题打印附完整答案详解【名师系列】.docx
- 2023年度安全员考试题库检测试题打印及答案详解【考点梳理】.docx
- 2023年度安全员考试题库检测试题打印附完整答案详解【各地真题】.docx
- 2023年度安全员考试题库检测试题打印附参考答案详解【完整版】.docx
- 2023年度安全员考试高分题库含答案详解(精练).docx
- 2023年度安全员考试高分题库及参考答案详解【能力提升】.docx
- 2023年度安全员考试高分题库附答案详解【典型题】.docx
- 2023年度安全员考试高分题库及参考答案详解(培优B卷).docx
文档评论(0)