欢迎来到天天文库
浏览记录
ID:45034390
大小:319.00 KB
页数:37页
时间:2019-11-08
《C程序设计-对象分册(第3章)》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、1第3章多态性本章学习重点掌握内容:多态的概念和作用,多态的实现方法常见运算符的重载静态联编和动态联编虚函数、纯虚函数和抽象基类的概念和用法虚析构函数的概念和作用,虚析构函数的用法2第3章多态性3.1多态性的概念3.2运算符重载3.3联编和虚函数3.4纯虚函数和抽象类3.5综合应用实例33.1多态性的概念多态性就是一个事物多种形态,就是同一符号或者名字在不同情况下具有不同解释的现象。多态性有两种表现形式:一种是不同的对象在收到相同的消息时,产生不同的动作;另一种是同一对象收到相同的消息却产生不同的函数调用。4多态的两种实现方式两种表现
2、形式分别叫做:编译时多态和运行时多态。编译时多态——也叫静态多态性,属于早期绑定,在编译时就实现了绑定,它是静态联编的;实现方式重载,包括函数重载。操作符重载运行时多态——也叫动态多态性,属于晚期绑定,在编译时还无法确定绑定对象,只有在运行时才能够实现绑定,它是动态联编的。实现方式:虚函数53.2.1运算符重载概述复数类ComplexclassComplex{public:Complex(){real=image=0;}Complex(doubler,doublei){real=r,image=i;}voidPrint();priva
3、te:doublereal,image;};voidComplex::Print(){if(image<0)cout<4、载概述(1)一般来说,不改变运算符原有含义,只让它能针对新类型数据的实际需要,对原有运算符进行适当的改造。例如,重载“+”运算符后,它的功能还是进行加法运算。(2)重载运算符时,不能改变运算符原有的优先级别,也不能改变运算符需要的操作数的数目。重载之后运算符的优先级和结合性都不会改变。(3)不能创建新的运算符,只能重载c++中已有的运算符。(4)有些运算符不能进行重载。如:“.”类成员运算符、“*”类指向运算符、“::”类作用域运算符、“?:”条件运算符及“sizeof”求字节数运算符。83.2.2运算符重载的实现运算符重载的本质就是5、函数重载。属于静态多态性首先把指定的运算表达式转化为对运算符函数的调用,运算对象转化为运算符函数的实参,然后根据实参的类型来确定需要调用的函数.这个过程是在编译过程中完成的。运算符重载形式有两种:类的成员函数、友元函数。9语法形式如下:函数类型operator运算符(形参表){函数体;}重载一元运算符没有参数;重载二元运算符只有一个参数。一般基于某个对象调用成员函数,这个对象是一个隐含的操作数,就是被调用的运算符函数的一个操作数,而且是第一操作数有了运算符重载以后,当程序中出现表达式:"oCCounter2=oCCounter2+oC6、Counter1;"的时候编译程序将其解释为:"oCCounter2=oCCounter2.operator+(oCCounter1)"成员函数的调用只能够通过成员函数所属的类的对象来调用,也就是说被重载的运算符的第一操作数的类型是确定的,是隐含的,不可改变。运算符重载为类的成员函数10运算符重载为类的友元函数语法形式如下:friend函数类型operator运算符(形参表){函数体;}不是成员函数,也没有this指针,用友元函数重载二元运算符(双目运算符)时,要有两个参数;重载一元运算符(单目运算符)时,要有一个参数。11成员函数与7、友元函数重载区别当运算符重载为类的成员函数时,函数的参数个数比原来的参与运算的运算数个数要少一个(后缀++、--除外).当运算符重载为类的友元函数时,参数个数与原运算数的个数相同。12单目和双目运算符重载的重载一般来讲,单目运算符最好重载为成员函数,而双目运算符则最好重载为友元函数。1单目运算符重载可重载为没有参数的成员函数或者带有一个参数的非成员函数(友元函数),其参数必须是用户定义类型的对象或者是对该对象的引用13单目运算符重载单目运算符++和--,重载时,由于有前缀和后缀的差别,其参数个数遵照以下格式规定:<函数类型>opera8、tor++();//前缀运算符重载<函数类型>operator++(int);//后缀运算符重载<函数类型>operator--();//前缀运算符重载<函数类型>operator--(int);//后缀运算符重载前缀和
4、载概述(1)一般来说,不改变运算符原有含义,只让它能针对新类型数据的实际需要,对原有运算符进行适当的改造。例如,重载“+”运算符后,它的功能还是进行加法运算。(2)重载运算符时,不能改变运算符原有的优先级别,也不能改变运算符需要的操作数的数目。重载之后运算符的优先级和结合性都不会改变。(3)不能创建新的运算符,只能重载c++中已有的运算符。(4)有些运算符不能进行重载。如:“.”类成员运算符、“*”类指向运算符、“::”类作用域运算符、“?:”条件运算符及“sizeof”求字节数运算符。83.2.2运算符重载的实现运算符重载的本质就是
5、函数重载。属于静态多态性首先把指定的运算表达式转化为对运算符函数的调用,运算对象转化为运算符函数的实参,然后根据实参的类型来确定需要调用的函数.这个过程是在编译过程中完成的。运算符重载形式有两种:类的成员函数、友元函数。9语法形式如下:函数类型operator运算符(形参表){函数体;}重载一元运算符没有参数;重载二元运算符只有一个参数。一般基于某个对象调用成员函数,这个对象是一个隐含的操作数,就是被调用的运算符函数的一个操作数,而且是第一操作数有了运算符重载以后,当程序中出现表达式:"oCCounter2=oCCounter2+oC
6、Counter1;"的时候编译程序将其解释为:"oCCounter2=oCCounter2.operator+(oCCounter1)"成员函数的调用只能够通过成员函数所属的类的对象来调用,也就是说被重载的运算符的第一操作数的类型是确定的,是隐含的,不可改变。运算符重载为类的成员函数10运算符重载为类的友元函数语法形式如下:friend函数类型operator运算符(形参表){函数体;}不是成员函数,也没有this指针,用友元函数重载二元运算符(双目运算符)时,要有两个参数;重载一元运算符(单目运算符)时,要有一个参数。11成员函数与
7、友元函数重载区别当运算符重载为类的成员函数时,函数的参数个数比原来的参与运算的运算数个数要少一个(后缀++、--除外).当运算符重载为类的友元函数时,参数个数与原运算数的个数相同。12单目和双目运算符重载的重载一般来讲,单目运算符最好重载为成员函数,而双目运算符则最好重载为友元函数。1单目运算符重载可重载为没有参数的成员函数或者带有一个参数的非成员函数(友元函数),其参数必须是用户定义类型的对象或者是对该对象的引用13单目运算符重载单目运算符++和--,重载时,由于有前缀和后缀的差别,其参数个数遵照以下格式规定:<函数类型>opera
8、tor++();//前缀运算符重载<函数类型>operator++(int);//后缀运算符重载<函数类型>operator--();//前缀运算符重载<函数类型>operator--(int);//后缀运算符重载前缀和
此文档下载收益归作者所有