欢迎来到天天文库
浏览记录
ID:48081297
大小:519.00 KB
页数:39页
时间:2020-01-12
《四、运算符重载_面向对象程序设计.ppt》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、课程要求课程内容课程内容课程要求参考书目返回首页面向对象程序设计运算符重载基本概念成员运算符函数友元运算符重载特殊运算符重载面向对象程序设计基本概念多态性的概念不同对象接受到相同消息产生不同的行为多态性的实现编译时的多态性:函数重载、运算符重载(静态联编)运行时多态性:虚函数(动态联编)面向对象程序设计基本概念运算符重载概念运算符重载也是多态性的一种,实质就是赋予已有的运算符多重含义。使同一个运算符作用于不同类型的数据时导致不同的行为的这种机制称为运算符重载。重新解释运算符的含义。面向对象程序设计基本概
2、念运算符重载的作用允许用户为类对象提供一个直觉的接口,使得程序代码直观、易懂classFred{inta,intb;public:……}f1,f2;如果使用下面语句实现对象相加Fredtotal=f1+f2;//错误代码面向对象程序设计基本概念运算符重载的作用如果没有运算符重载Fredadd(Fred,Fred);Fredmul(Fred,Fred);Fredf(Freda,Fredb,Fredc){returnadd(add(mul(a,b),mul(b,c)),mul(c,a));}如果使用运算符重
3、载Fredoperator+(Fred,Fred);Fredoperator*(Fred,Fred);Fredf(Freda,Fredb,Fredc){returna*b+b*c+c*a;}面向对象程序设计基本概念C++编译器在对运算符进行编译处理时,将一个运算符编译成如下形式:一元运算符:@obj编译成operator@(obj)二元运算符:obj1@obj2编译成operator@(obj1,obj2)其中,关键字operator加上运算符名的函数称为运算符函数。由于C++中有前置++、--,后置+
4、+、--,为了区分它们,C++将后置++、--编译成:后置--:obj--编译成operator--(obj,0)后置++:obj++编译成operator++(obj,0)面向对象程序设计基本概念运算符重载的实现返回类型operator运算符(参数表)这种操作通常以类的成员函数或是类的友元函数来实现面向对象程序设计基本概念可以用作重载的运算符不允许重载的运算符1、+、-、*、/、%、++、--2、&、
5、、~、^、<<、>>3、!、&&、
6、
7、4、<、>、>=、<=、==、!=5、=、+=、-=、*=、/
8、=、%=、&=、
9、=、^=、6、[]、()、->、,、new、delete、new[]、delete[]..*(指针)?:::sizeof面向对象程序设计基本概念编译程序选用运算符函数的原则遵循函数重载的选择原则(同函数重载):根据参数匹配的原则运算符的重载规则(1)重载后运算符的优先级与结合性不会改变。(2)不能改变原运算符操作数的个数。(3)不能重载C++中没有的运算符。(4)不能改变运算符的原有语义。面向对象程序设计友元运算符函数类内声明类外定义形式friend返回类型operator运算符(参
10、数表)返回类型operator运算符(参数表){……}类外函数,不属于任何类对象,没有this指针重载双目运算符,参数表需两个参数重载单目运算符,参数表需一个参数不能用友元重载的运算符:=()[]->面向对象程序设计友元运算符函数点类运算的实现classCPoint{intx,y;public:CPoint(intvx,intvy){x=vx;y=vy;}CPoint(){x=0;y=0;}voidPrint(){cout<11、+(CPoint&c);};面向对象程序设计友元运算符函数点类运算的实现fcpoint.cppCPointoperator++(CPoint&c){c.x++;c.y++;returnc;}能否改为CPointc?面向对象程序设计友元运算符函数单目运算符双目运算符对于要改变操作数的运算符(++、--),参数必须是引用或指针不改变操作数的运算符(-),可以不用以友元重载运算符,进行复数类运算fcomplex.cpp有两个操作数,因此参数也应该设两个面向对象程序设计成员运算符函数类内声明形式类外定义形式返回12、类型operator运算符(参数表)返回类型类名::operator运算符(参数表){……}面向对象程序设计当运算符重载为类的成员函数时,函数的参数个数将比原来的操作数个数要少一个;原因是通过对象调用该运算符函数时,对象本身充当了运算符函数最左边的操作数,少了的操作数就是该对象本身。因此:①双目运算符重载为类的成员函数时,函数只显式说明一个参数,该形参是运算符的右操作数。②前置单目运算符重载为类的成员函数时,不需要显式说明参数,即函数没有形
11、+(CPoint&c);};面向对象程序设计友元运算符函数点类运算的实现fcpoint.cppCPointoperator++(CPoint&c){c.x++;c.y++;returnc;}能否改为CPointc?面向对象程序设计友元运算符函数单目运算符双目运算符对于要改变操作数的运算符(++、--),参数必须是引用或指针不改变操作数的运算符(-),可以不用以友元重载运算符,进行复数类运算fcomplex.cpp有两个操作数,因此参数也应该设两个面向对象程序设计成员运算符函数类内声明形式类外定义形式返回
12、类型operator运算符(参数表)返回类型类名::operator运算符(参数表){……}面向对象程序设计当运算符重载为类的成员函数时,函数的参数个数将比原来的操作数个数要少一个;原因是通过对象调用该运算符函数时,对象本身充当了运算符函数最左边的操作数,少了的操作数就是该对象本身。因此:①双目运算符重载为类的成员函数时,函数只显式说明一个参数,该形参是运算符的右操作数。②前置单目运算符重载为类的成员函数时,不需要显式说明参数,即函数没有形
此文档下载收益归作者所有