欢迎来到天天文库
浏览记录
ID:58891083
大小:84.00 KB
页数:58页
时间:2020-09-30
《C++ 第8章 多态性与虚函数ppt课件.ppt》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、第8章多态性与虚函数8.1函数重载8.2运算符重载8.3静态联编和动态联编8.4虚函数多态性是面向对象程序设计的重要特征之一。所谓多态性指的是一个名称可以具有多种语义。利用多态性,用户只需发送一般形式的消息,而将所有的实现留给接收消息的对象,对象根据所接收到的消息而做出相应的动作(即操作)。虚函数是实现多态性的重要机制之一。8.1函数重载所谓函数重载是指同一个函数名可以对应多个函数的实现。例如,可以给函数名add()定义多个函数实现,该函数的功能是求和,即求两个运算数的和。其中,一个函数实现是求两个int型数之和,另一个实现是求两个浮点型数
2、之和,再一个实现是求两个复数的和。每种实现对应着一个函数体,这些函数的名字相同,但是函数的参数类型不同。这就是函数重载的概念。函数重载的方法:函数重载要求编译器能够惟一地确定调用一个函数时应执行哪个函数代码,即采用哪个函数实现。确定函数实现时,要求从函数参数的个数和类型上来区分。这就是说,进行函数重载时,要求同名函数在参数个数上不同,或者参数类型上不同。否则,将无法实现重载。#includeintabs(intx){returnx>0?x:-x;}doubleabs(doublex){returnx>0?x:-x;}
3、voidmain(){cout<<“-10的绝对值是:”<4、s函数#includeintmin(inta,intb);intmin(inta,intb,intc);intmin(inta,intb,intc,intd);voidmain(){cout<5、ta,intb,intc,intd){intt1=min(a,b);intt2=min(c,d);returnmin(t1,t2);}考虑重载函数的参数个数分别是多少?#includeclassTPoint{intx,y;public:TPoint(){}TPoint(intx1,inty1){x=x1;y=y1;}voidsetvalue(intx1,inty1){x=x1;y=y1;}例8.3以下程序是重载构造函数的实现:voiddispoint(){cout<<“(”<6、;}};voidmain(){TPointa(12,16),b;cout<<“Firstpoint=>”;a.dispoint();b.setvalue(5,18);cout<<“Secondpoint=>”;b.dispoint();}本程序执行结果如何?8.2运算符重载运算符重载的实质是函数重载。在实现过程中,首先把指定的运算表达式转化为对运算符函数的调用,运算对象转化为运算符函数的实参,然后根据实参的类型来确定需要调用哪个函数,这个过程在编译过程中完成。8.2.1运算符重载的规则8.2.2运算符重载为成员函数8.2.3运算符重载为友元7、函数C++中预定义的运算符的操作对象只能是基本数据类型,实际上,对于很多用户自定义类型,也需要有类似的运算操作。例如:classcomplex{public:complex(doubler=0.0,doubleI=0.0){real=r;imag=I;}voiddisplay();private:doublereal;doubleimag;};complexa(10,20),b(5,8);“a+b”运算如何实现?1、运算符重载是对已有的运算符赋予多重含义,使同一个运算符作用于不同类型的数据导致不同类型的行为。2、运算符重载的实质是函数重载。8、在实现过程中,首先把指定的运算表达式转化为对运算符函数的调用,运算对象转化为运算符函数的实参,然后根据实参的类型来确定需要调用哪个函数,这个过程在编译过程中完成。8.2.1运算符
4、s函数#includeintmin(inta,intb);intmin(inta,intb,intc);intmin(inta,intb,intc,intd);voidmain(){cout<5、ta,intb,intc,intd){intt1=min(a,b);intt2=min(c,d);returnmin(t1,t2);}考虑重载函数的参数个数分别是多少?#includeclassTPoint{intx,y;public:TPoint(){}TPoint(intx1,inty1){x=x1;y=y1;}voidsetvalue(intx1,inty1){x=x1;y=y1;}例8.3以下程序是重载构造函数的实现:voiddispoint(){cout<<“(”<6、;}};voidmain(){TPointa(12,16),b;cout<<“Firstpoint=>”;a.dispoint();b.setvalue(5,18);cout<<“Secondpoint=>”;b.dispoint();}本程序执行结果如何?8.2运算符重载运算符重载的实质是函数重载。在实现过程中,首先把指定的运算表达式转化为对运算符函数的调用,运算对象转化为运算符函数的实参,然后根据实参的类型来确定需要调用哪个函数,这个过程在编译过程中完成。8.2.1运算符重载的规则8.2.2运算符重载为成员函数8.2.3运算符重载为友元7、函数C++中预定义的运算符的操作对象只能是基本数据类型,实际上,对于很多用户自定义类型,也需要有类似的运算操作。例如:classcomplex{public:complex(doubler=0.0,doubleI=0.0){real=r;imag=I;}voiddisplay();private:doublereal;doubleimag;};complexa(10,20),b(5,8);“a+b”运算如何实现?1、运算符重载是对已有的运算符赋予多重含义,使同一个运算符作用于不同类型的数据导致不同类型的行为。2、运算符重载的实质是函数重载。8、在实现过程中,首先把指定的运算表达式转化为对运算符函数的调用,运算对象转化为运算符函数的实参,然后根据实参的类型来确定需要调用哪个函数,这个过程在编译过程中完成。8.2.1运算符
5、ta,intb,intc,intd){intt1=min(a,b);intt2=min(c,d);returnmin(t1,t2);}考虑重载函数的参数个数分别是多少?#includeclassTPoint{intx,y;public:TPoint(){}TPoint(intx1,inty1){x=x1;y=y1;}voidsetvalue(intx1,inty1){x=x1;y=y1;}例8.3以下程序是重载构造函数的实现:voiddispoint(){cout<<“(”<6、;}};voidmain(){TPointa(12,16),b;cout<<“Firstpoint=>”;a.dispoint();b.setvalue(5,18);cout<<“Secondpoint=>”;b.dispoint();}本程序执行结果如何?8.2运算符重载运算符重载的实质是函数重载。在实现过程中,首先把指定的运算表达式转化为对运算符函数的调用,运算对象转化为运算符函数的实参,然后根据实参的类型来确定需要调用哪个函数,这个过程在编译过程中完成。8.2.1运算符重载的规则8.2.2运算符重载为成员函数8.2.3运算符重载为友元7、函数C++中预定义的运算符的操作对象只能是基本数据类型,实际上,对于很多用户自定义类型,也需要有类似的运算操作。例如:classcomplex{public:complex(doubler=0.0,doubleI=0.0){real=r;imag=I;}voiddisplay();private:doublereal;doubleimag;};complexa(10,20),b(5,8);“a+b”运算如何实现?1、运算符重载是对已有的运算符赋予多重含义,使同一个运算符作用于不同类型的数据导致不同类型的行为。2、运算符重载的实质是函数重载。8、在实现过程中,首先把指定的运算表达式转化为对运算符函数的调用,运算对象转化为运算符函数的实参,然后根据实参的类型来确定需要调用哪个函数,这个过程在编译过程中完成。8.2.1运算符
6、;}};voidmain(){TPointa(12,16),b;cout<<“Firstpoint=>”;a.dispoint();b.setvalue(5,18);cout<<“Secondpoint=>”;b.dispoint();}本程序执行结果如何?8.2运算符重载运算符重载的实质是函数重载。在实现过程中,首先把指定的运算表达式转化为对运算符函数的调用,运算对象转化为运算符函数的实参,然后根据实参的类型来确定需要调用哪个函数,这个过程在编译过程中完成。8.2.1运算符重载的规则8.2.2运算符重载为成员函数8.2.3运算符重载为友元
7、函数C++中预定义的运算符的操作对象只能是基本数据类型,实际上,对于很多用户自定义类型,也需要有类似的运算操作。例如:classcomplex{public:complex(doubler=0.0,doubleI=0.0){real=r;imag=I;}voiddisplay();private:doublereal;doubleimag;};complexa(10,20),b(5,8);“a+b”运算如何实现?1、运算符重载是对已有的运算符赋予多重含义,使同一个运算符作用于不同类型的数据导致不同类型的行为。2、运算符重载的实质是函数重载。
8、在实现过程中,首先把指定的运算表达式转化为对运算符函数的调用,运算对象转化为运算符函数的实参,然后根据实参的类型来确定需要调用哪个函数,这个过程在编译过程中完成。8.2.1运算符
此文档下载收益归作者所有