第9讲 运算符重载(二)。.ppt

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第9讲 运算符重载(二)。

运算符重载为友元 * 运算符重载为友元函数 运算符也可以重载为类的友元函数,这样它就可以自由地访问该类的任何数据成员。这时,运算所需要的操作数都需要通过函数的形参表来传递,在参数表中形参从左到右的顺序就是运算符操作数的顺序。但是,有些运算符不能重载为友元,如“=”、“()”、“[]”和“-”。 运算符重载为友元 1.双目运算:oprdl B oprd2 对于双目运算符B,如果opr dl为A类的对象,则应当把B重载为A类的友元函数,该函数有两个形参,其中一个形参的类型是A类。经过重载之后,表达式oprdl B oprd2就相当于函数调用operator B (oprdl,oprd2)。 运算符重载为友元 2.单目运算 1)前置单目运算:U oprd 对于前置单目运算符U,如“-”(负号)等,如果要实现表达式U oprd(其中oprd为A类的对象),则U可以重载为A类的友元函数,函数的形参为A类的对象。经过重载之后,表达式U oprd相当于函数调用operator U (oprd)。 运算符重载为友元 2)后置单目运算:oprd V 对于后置运算符V,如“++”和“--”,如果要实现表达式oprd ++或oprd --(其中oprd为A类的对象),那么运算符就可以重载为A类的友元函数,这时函数的形参有两个,一个是A类的对象oprd,另一个是整型(int)形参。重载之后,表达式oprd++和oprd--就相当于函数调用operator++ (oprd,0)和operator-- (oprd,0)。 运算符重载为友元 【例3】双目运算符重载为友元重载例题。 #includeiostream.h class point { private: float x,y; 运算符重载为友元 public: point(float xx=0,float yy=0){x=xx;y=yy;} float get_x(){return x;} float get_y(){return y;} friend point operator+(point p1,point p2);//重载运算符“+” friend point operator-(point p1,point p2) ;//和“-”为友元函数 }; 运算符重载为友元 运算符重载为友元 void main() { point p1(3,3),p2(2,2),p3,p4; p3=p1+p2; //两点相加 p4=p1-p2; //两点相减 coutp3.get_x() p3.get_y()endl; coutp4.get_x() p4.get_y()endl; } 运算符重载 练习、定义一个复数类complex,重载运算符“+”,使之能用于复数的加法运算,参加运算的两个运算量可以都是复数类对象,也可以其中有一个是整数,顺序任意。例如:c1+c2,c1+i,i+c1,c1+=c2均合法,编程:分别求两个复数之和,整数和复数之和。 赋值运算符“=”的重载 若obj1和obj2是类X的两个对象,obj2已被创建,则编译程序遇到如下语句: obj1=obj2; 就调用缺省的赋值运算符函数,将对象obj2的数据成员的值逐个赋给对象obj1的对应数据成员中。 赋值运算符“=”的重载 public: string(char *s) {ptr=new char[strlen(s)+1]; strcpy(ptr,s); } ~string() { delete ptr; } void print() { coutptrendl; } 赋值运算符“=”的重载 private: char *ptr; }; void main() { string p1(“book”),p2(pen); p1=p2; coutp2:; p2.print(); coutp1:; p1.print(); } 赋值运算符“=”的重载 例: 重载赋值运算符解决指针悬挂问题。 #include iostream.h #includestring.h class s

您可能关注的文档

文档评论(0)

yaocen + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档