C++语言程序设计 作者 邓振杰 第08章.pptVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第8章 运 算 符 重 载 8.1 概 述 8.2 运算符重载的一般规则 8.3 一些特殊操作符的重载 运算符重载就是给已有运算符赋予更多的含义。通过重新定义运算符,使它能够用于特定类的对象执行特定的功能。运算符重载提供了重新定义语言、扩展语言的能力,使程序更加容易阅读和调试。 8.1 概 述 运算符通常是针对类中的私有成员进行操作,因此重载运算符应该能够访问类中的私有成员,所以运算符重载一般采用成员函数或友元函数的方式。运算符重载的过程是将现有运算符与成员函数或友元函数相关联,使得该运算符具有将该类的对象用作其操作数的能力。 如: if (obj1=obj2) { …… } 其中obj1和obj2为类的对象,对象的比较运算可在成员函数中定义或在友元中定义,并与比较运算符关联。编译器可以通过检查运算符数据类型来区分重载的运算符,运算符重载是多态性的一种形式,即运算符多态性。 8.2 运算符重载的一般规则 运算符重载具有以下原则: (1)重载的运算符是C++中已经存在的运算符,不能够主观创造。 (2)运算符重载不能改变运算符的语法结构,即操作数的个数。 (3)运算符重载不能改变C++语言中已定义的运算符的优先顺序和结合性。 (4)运算符重载一般不改变运算符功能。 (5)不能重载的运算符有:sizeof()运算符;成员运算符(.);指向成员的指针运算符(*);作用域运算符(::);条件运算符(?:)。 8.3 一些特殊操作符的重载 运算符重载函数是指含有实际的重载运算符的函数,一般采用两种形式:重载为类的成员函数形式和友元函数形式。 8.3.1 一元运算符重载 重载为类的成员函数 将运算符重载函数说明为类的成员函数的格式如下: 类型 operator 运算符( 参数列表) 要重载的运算符必须置于关键字operator之后。 【例8.1】重载运算符++。 class Point { private: int xcoord; int ycoord; public: Point (){xcoord =0; ycoord =0;} void operator++(){ ++xcoord; ++ ycoord;} }; void main() { Point obj1; obj1++; //使 xcoord、ycoord增加1 ++obj1; //使 xcoord、ycoord增加2 } 重载为类的友元函数 ? 将运算符重载函数说明为类的友元函数的格式如下: 类型 operator 运算符( 参数列表) 必须在类的定义中说明该运算符重载函数为类的友元函数。 【例8.2】用友元函数重载运算符++。 #include iostream.h class Point { private: int xcoord; int ycoord; public: Point() //无参数构造函数 { xcoord = 0; ycoord=0; } Point(int x,int y) //单一参数构造函数 { xcoord = x; ycoord =y; } void display(){cout “(” xcoord ”,”ycoord”)”endl;} friend Point operator++(Point ); //前缀自增 friend Point operator++(Point ,int); //后缀自增 }; Point operator++( Point e) { return Point (++e. xcoord, ++e. ycoord); } Point operator++( Point e,int) { return Point (e. xcoord ++, e. ycoord ++); } void main() { Point p1(10,10),p2; p2=p1++; p1.display(); p2.display(); p2=++p1; p1.display(); p2.display(); } 程序运行结果为: (11,11) (10,10) (12,12) (12,12) 8.3.2 二元运算符重载 二元算术运算符重载 【例8.3】加法运算符重载 Point Point::operator+(Point a) { Point p; //临时对象 p.xcoord= xcoord+ a. xcoord ; p.ycoord= ycoord+ a. ycoord ; return p;

您可能关注的文档

文档评论(0)

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

1亿VIP精品文档

相关文档