第五章节 运算符重载.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文档。上传文档
查看更多
第五章节 运算符重载

济南大学信息学院 第5章 运算符重载 内容: 基本的运算符,不直接支持类对象。可以通过重新定义运算符来支持类,带来编程的方便。这就是运算符的重载。 重载可以通过两张方式实现。将运算符函数定义为类的友元或定义为成员函数。 运算符重载的实例。 5.1 运算符重载的概念 5.1 运算符重载的概念 5.1 运算符重载的概念 5.1 运算符重载的概念 C++预定义的运算符只能对基本数据类型进行操作,为了让运算符能够直接操作类类型的对象,需要对这些运算符重新定义,让它们也能够支持类,这就是运算符的重载。 例如对于int型对象a和b,求和可以直接写为“a+b”。但是对于类对象,不能直接使用类似的表达方式。 对于两个Complex类型的对象obj1和obj2,我们仍然希望能够像基本数据类型那样将表达式写为:obj1+obj2。 实质:运算符重载也就是函数重载。 C++运算符可以认为是函数名,如加法运算符,函数名为operator+。 5.1 运算符重载的概念 运算符函数重载的声明格式一般如下: 返回类型 operator运算符 ( 形参列表 ); 5.2 运算符重载的规则 C++运算符重载原则 准则一:绝大多数运算符可以用来重载,除了以下几个不能重载: 下面几个不能重载: . 成员访问运算符 .* 成员指针访问运算符 :: 作用域运算符 sizeof 求字节数运算符 typeid 类型识别 ?: 条件运算符 =可直接使用于类对象,但当在不适用的场合必须重载 两运算符不用重载可以直接来操作对象变量, 。 Cpoint c1(1,2),c3; c3 = c1; coutc3endl; 5.2 运算符重载的规则 准则二:运算符重载要遵循四不变原则: 操作个数不变 优先级不变 结合性不变 语义不变。 5.3 运算符重载的两种形式 由于运算符要求直接操作类的私有数据变量,所以运算符重载的时候有两种形式: 第一种:运算符(函数)被重载为类的成员函数。 第二种:运算符(函数)被重载为类的友元函数。 5.3.1 重载为类的友元函数 5.3.1 重载为类的友元函数 5.3.1 重载为类的友元函数 5.3.2 重载为类的成员函数 5.3.1 重载为类的成员函数 5.3.1 重载为类的成员函数 5.3.3 重载方式的选择 运算符的两种重载形式都可以实现要求的功能,但是成员函数和友元函数是不同的。 从表面上看,友元函数比成员函数多一个形参。实际上,成员函数所在的对象就是第1个操作数,成员函数如果带参数则是第2个操作数。 成员函数体现了类的封装性,友元函数灵活。 “()”、“[]”、“-”、“-*”及“=”必须重载为成员函数。 5.4 特殊运算符重载举例 赋值运算符“=”的重载。缺省的情况下,赋值运算符执行位拷贝的功能,即将右值位拷贝到左值,同拷贝构造函数一样,特殊情况下需要重载。形式为: CPoint CPoint::operator=(const CPoint pt); 见Student例程。 5.4 特殊运算符重载举例 复合赋值语句的重载,比如“+=”, “+”和“=”的重载不能代替“+=”。(例5-4) 自增和自减运算符。这两种运算符有前置和后置两种方式,在重载的时候要区分。前置++与后置++重载为成员函数的声明形式分别为: 类名 类名::operator++();//前置 类名 类名::operator++(int);//后置 见例5-5 如果采用友元函数重载,分别对应: friend const Increase operator++(Increase in) friend const Increase operator++(Increase in,int) 5.4 特殊运算符重载举例 cin和cout分别是istream类和ostream类的对象。 C++已经对和移位运算符进行了重载,使它们分别成为流提取运算符和流插入运算符。用来输入或输出C++的标准类型数据。 对象(类)不能直接用和输出和输入,如想用它们进行输入或输出,程序员必须对它们重载。形式为: friend istream operator (istream,自定义类); friend ostream operator (ostream,自定义类);  见例5-6 5.4 特殊运算符重载举例 运算符“()”表示函数调用,如f()。在需要函数指针的场合,使用很不方便。可以考虑运算符重载。 返回值 operator() (参数表) 见例程FuncObj 本节内容小节 运算符重载的目的 运算符重载的准则 运算符重载的形式 如何选择运算符重载的形式 * * * class Complex { pr

文档评论(0)

qiwqpu54 + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档