欢迎来到天天文库
浏览记录
ID:59476198
大小:6.02 MB
页数:77页
时间:2020-09-14
《C面向对象程序设计教程(下)ppt课件.ppt》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、汇天地之长育学子精英C++面向对象程序设计教程(下)第章多态性Chapter5Polymorphism第章模板与异常处理Chapter6Template第章流Chapter7stream3567所谓多态性就是不同对象收到相同的消息时,产生不同的动作。通俗的说,多态性是指用一个名字定义不同的函数,这些函数执行不同但又有类似的操作,即用同样的接口访问功能不同的函数,从而实现“一个接口,多种方法”。以前讲的“函数重载”,就是一种多态。5.1运算符重载intx,y,z;z=x+y;这是将两个整数相加的方法,非常简单.若有一个复数
2、类complexclasscomplex{public:doublereal;doubleimag;complex(doubler=0,doublei=0){real=r;imag=i;}};把complex的两个对象com1和com2加在一起。能否这样实现:complexcom1(1.1,2.2),com2(3.3,4.4),total1;total1=com1+com2;C++为运算符提供了一种方法,即在进行运算符重载时,必须写一个运算符函数,其名字为operator后随一个要重载的运算符。函数功能operator+
3、()加法operator-()减法operator*()乘法operator/()除法operator<()小于……表5.1运算符函数这样,编译器在一个运算符的两边“看”到自定义的数据类型,就执行型用户自己的函数,而不是内部运算符的常规程序.classcomplex{public:doublereal;doubleimag;complex(doubler=0,doublei=0){real=r;imag=i;}};complexoperator+(complexco1,complexco2){complextemp;te
4、mp.real=co1.real+co2.real;temp.imag=co1.imag+co2.imag;returntemp;}voidmain(){complexcom1(1.1,2.2),com2(3.3,4.4),total1,total2;total1=operator+(com1,com2);//显示调用cout<5、";}注意:(1)重载运算符要与原有功能类似。(2)重载运算符,只能重载已有的运算符.程序员不能臆造新的运算符来扩充C++语言。(3)类属关系运算符“.”、指针运算符“*”、作用域运算符“::”、sizeof运算符不能被重载。(4)不能改变运算符的操作数个数。例如“+”,只能是两个操作数。(5)不能改变运算符原有的优先级。x=y-a*b;例:用*实现两个复数相乘编程练习classcomplex{private:doublereal;doubleimag;public:complex(doubler=0,doublei=06、){real=r;imag=i;}};思考:如何实现运算符重载呢?5.2友元运算符函数运算符重载函数是在类的外部定义的,这个运算的重载函数只能访问类中的公有数据成员,而不访问类的私有数据成员。解决办法是:(1)定义为它将要操作的类的成员函数(2)是定义类的友元函数。友元运算符函数定义的语法形式:classx{friend返回类型operator运算符(形参表)};classcomplex{private:doublereal;doubleimag;public:complex(doubler=0,doublei=0){r7、eal=r;imag=i;}voidprint();friendcomplexoperator+(complexco1,complexco2);};complexoperator+(complexco1,complexco2){complextemp;temp.real=co1.real+co2.real;temp.imag=co1.imag+co2.imag;returntemp;}voidcomplex::print(){cout<0)cout<<"+";if(imag!=0)cout<<8、imag<<"i";}voidmain(){complexcom1(1.1,2.2),com2(3.3,4.4),total1,total2;total1=com1+com2;total1.print();}以上程序在vc6中运行会出现如下错误:提示不能访问私有成员,没有这个访问权限。这是VC的一个经典BUG和nam
5、";}注意:(1)重载运算符要与原有功能类似。(2)重载运算符,只能重载已有的运算符.程序员不能臆造新的运算符来扩充C++语言。(3)类属关系运算符“.”、指针运算符“*”、作用域运算符“::”、sizeof运算符不能被重载。(4)不能改变运算符的操作数个数。例如“+”,只能是两个操作数。(5)不能改变运算符原有的优先级。x=y-a*b;例:用*实现两个复数相乘编程练习classcomplex{private:doublereal;doubleimag;public:complex(doubler=0,doublei=0
6、){real=r;imag=i;}};思考:如何实现运算符重载呢?5.2友元运算符函数运算符重载函数是在类的外部定义的,这个运算的重载函数只能访问类中的公有数据成员,而不访问类的私有数据成员。解决办法是:(1)定义为它将要操作的类的成员函数(2)是定义类的友元函数。友元运算符函数定义的语法形式:classx{friend返回类型operator运算符(形参表)};classcomplex{private:doublereal;doubleimag;public:complex(doubler=0,doublei=0){r
7、eal=r;imag=i;}voidprint();friendcomplexoperator+(complexco1,complexco2);};complexoperator+(complexco1,complexco2){complextemp;temp.real=co1.real+co2.real;temp.imag=co1.imag+co2.imag;returntemp;}voidcomplex::print(){cout<0)cout<<"+";if(imag!=0)cout<<
8、imag<<"i";}voidmain(){complexcom1(1.1,2.2),com2(3.3,4.4),total1,total2;total1=com1+com2;total1.print();}以上程序在vc6中运行会出现如下错误:提示不能访问私有成员,没有这个访问权限。这是VC的一个经典BUG和nam
此文档下载收益归作者所有