网站大量收购闲置独家精品文档,联系QQ:2885784924

4 运算符重载 276602132.ppt

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

第3讲 运算符重载 ——深入理解面向对象编程之一 本章学习目标 理解怎样重定义与新类型一起使用的运算符 理解怎样把一个类的对象转换为另一个类的对象 学习利用了重载运算符的几个范例类 楔子——复数加法运算的函数实现 * 习惯写法: c3=c1+c2 调用方式不直观,太繁琐 调用方式直观,简洁 基本知识 定义 将C++中的运算符和类的对象用在一起的过程,利用运算符对对象进行操作,即一名多用 函数名形式: operator+运算符 与采用普通函数方式实现的运算功能的函数体、参数列表完全相同,只是函数名不同?函数的用法不同 优点 更好的可扩充性 含义直观明晰,简洁易懂 最适合于数学类 禁忌 过度使用,导致程序语义不清 不合理使用 -重载+,却执行类似减法的运算 * 运算符列表 可重载的运算符: + - * / % ^ ! = += –= ^= = |= = = = || ++ –– ( ) [ ] new delete | ~ *= /= %= = == != , – –* 不可重载的运算符: . .* :: ?: sizeof * 运算符重载的限制 不能改变运算符的优先级 不能改变运算符的结合性,不能使用默认参数来重载运算符 不能改变运算符操作数的个数 单目运算符-(重载)?单目运算符 双目运算符-(重载) ?双目运算符 单/双目运算符-(重载) ?单/双目运算符 不能建立新的运算符 不能改变该运算符用于内部类型的对象时的含义 * 运算符重载的规则 运算符函数的参数至少有一个是类的对象或类的对象的引用 重载(),[],-,=时,运算符重载函数必须声明为类的成员函数 运算符只能被显式重载 重载赋值运算符=和加法运算符+后,+=将自动重载? * 类的成员函数??友元函数 参数对比 类的成员函数用this指针隐式地访问类对象的某个参数 友元函数的调用必须明确地列出该参数 适用情况 成员函数:最左边的操作数必须是运算符类的一个类对象或其引用 友元函数:(1)左边的操作数必须是一个不同的类对象或一个内部类型的对象(通常是友元)(2)使运算符具有可交换性 * 程序实例 // 运算符重载示例 class Complex { public: Complex( float re, float im ); Complex operator+( Complex other ); friend Complex operator+( int first, Complex second ); private: float real, imag; }; // 通过成员函数方式重载运算符 Complex Complex::operator+( Complex other ) { return Complex( real + other.real, imag + other.imag ); }; // 通过友元函数方式重载运算符 Complex operator+( int first, Complex second ) { return Complex( first + second.real, second.imag ); } * * 重载双目运算符 class String{ public: String operator+= (const String ); … } class String{ public: friend String operator+= (String , const String ); … } 重载双目运算符时,可采用成员函数或友元函数形式 例题4.4 例题4.4:字符串类String 源程序:P130-134 程序解读要点: 类的成员函数功能 成员函数的实现方法 用到哪些运算符重载 大型C++程序设计技巧提示 * 重载单目运算符 class String{ public: int operator! ( ) const; … } class String{ public: friend int operator! (const String ); … } 重载单目运算符时,最好把运算符函数作为类的成员函数而非友元函数! * 例题4.54.6:重载++和-- 源程序:P134-136 程序解读要点: 用到哪些运算符重载 前置自增运算符和后置自增运算符的区别 * 流插入和流提取运算符的重载 Example(P.137) 重载和必须使用友元函数形式。Why? 函数的参数:2个 - 对istream(ostream)的引用 - 对用户自定义类的引用 了解更多一些知识: typedef basic_istre

文档评论(0)

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

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

1亿VIP精品文档

相关文档