欢迎来到天天文库
浏览记录
ID:59209330
大小:98.50 KB
页数:32页
时间:2020-09-26
《第6章 多态性和虚函数ppt课件.ppt》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、第6章多态性和虚函数6.1运算符重载6.2虚函数6.3纯虚函数和抽象类6.4虚析构函数习题6.1运算符重载6.1.1运算符重载概述6.1.2用成员函数重载运算符6.1.3用友元函数重载运算符6.1.4几个常用运算符的重载6.1.1运算符重载概述1.运算符重载定义运算符重载是对已有的运算符赋予多重含义,同一个运算符作用于不同类型的数据导致不同类型的行为。C++中预定义的运算符的操作对象只能是基本数据类型,实际上,对于很多用户自定义类型,也需要有类似的运算操作,这就提出了对运算符进行重新定义,赋予已有符号新功能的要求。不能重载的运算符是:(1)成员访问运算符.(2)作用域运算符∷
2、(3)条件运算符?:(4)成员指针运算符*(5)编译预处理命令的开始符号#2.运算符重载的规则⑴C++中的运算符除了少数几个以外,几乎全部可以重载,程序员不能定义新的运算符,只能重载已有的这些运算符。⑵重载之后运算符的优先级和结合性都不能改变。⑶运算符重载是针对新类型数据的实际需要,对原有运算符进行适当的改造。一般来讲,重载的功能应当与原有功能相类似,不能改变原运算符所需操作数的个数,同时至少要有一个操作数是自定义类型。总之,当C++语言原有的一个运算符被重载之后,它原先所具有的语义并没有消失,只相当于针对一个特定的类定义了一个新的运算符。3.运算符重载的形式运算符重载可以使
3、用成员函数和友元函数两种形式。可以参考以下的经验:(1)只能使用成员函数重载的运算符有:=、()、[]、->、new、delete。(2)单目运算符最好重载为成员函数。(3)对于复合的赋值运算符如+=、-=、*=、/=、&=、!=、~=、%=、>>=、<<=建议重载为成员函数。(4)对于其它运算符,建议重载为友元函数。除了赋值运算符外,其它运算符函数都可以由派生类继承,并且派生类还可有选择地重载自己所需要的运算符(包括基类重载的运算符)。运算符重载的实质就是函数重载。6.1.2用成员函数(运算符函数)重载运算符typeoperator@(参数表)若运算符是一元的,则参数表为空
4、,此时当前对象作为此运算符的单操作数;若运算符是二元的,则参数表中有一个操作数,此时当前对象作为此运算符的左操作数,参数表中的操作数作为此运算符的右操作数,依此类推。运算符函数的定义方式同一般成员函数,对类成员的访问与一般成员函数相同,定义如下:type类名::operator@(参数表){//运算符处理程序代码}重载运算符的使用方法同原运算符一样,只是它的操作数一定要是定义它的特定类的对象。例题【例6.1】用成员函数重载运算符一【例6.2】用成员函数重载运算符二6.1.3用友元函数重载运算符friendtypeoperator@(参数表);注意友元函数不属于任何类,它没有t
5、his指针,这与成员函数完全不同。若运算符是一元的,则参数表中有一个操作数;若运算符是二元的,则参数表中有两个操作数。也就是说在用友元定义重载运算符时,所有的操作数均需要用参数来传递。友元运算符函数与成员运算符函数的主要区别在其参数个数不同。当运算符的左操作数是一个常数时,就不能利用this指针,应当用友元函数重载。友元运算符函数的定义如下:typeoperator@(参数表){//运算符处理程序代码}例题【例6.3】用友元函数重载运算符一【例6.4】用友元函数重载运算符实现两字符串加法参看教材的说明【例6.5】用重载运算符的方法进行复数运算6.1.4几个常用运算符的重载1.
6、运算符!和[]的重载【例6.6】运算符!和[]的重载2.前自增和后自增运算符++的重载前自增运算符++和后自增运算符++重载的语法<函数类型>operator++();//前<函数类型>operator++(int);//后【例6.7】用成员函数重载前自增和后自增运算符。【例6.8】用友元重载前自增和后自增3.运算符->的重载->运算符是成员访问运算符,这种一元的运算符只能被重载为成员函数,成员访问运算符->函数重载的一般形式为:【例6.9】重载->运算符。4.赋值运算符=的重载在正常的情况下,系统会为每一个类自动生成一个默认的完成上述功能的赋值运算符,当然,这种赋值只限于同
7、一个类类型说明的对象之间赋值,相当于浅拷贝构造函数。【例6.10】赋值运算符的重载一。【例6.11】赋值运算符的重载二。【例6.12】赋值运算符的重载三。5.逗号运算符,的重载逗号运算符是双目运算符,和其他运算符一样,也可以通过重载逗号运算符来完成期望完成的工作。逗号运算符构成的表达式为“左操作数,右操作数”,该表达式返回右操作数的值。如果用类的成员函数来重载逗号运算符,则只带一个右运算数,而左运算数由指针this提供。【例6.13】逗号运算符的重载6.2虚函数6.2.1为什么要引入虚函数6.2.2虚函
此文档下载收益归作者所有