第8章运算符重载1.ppt

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

目 录 问题引入: #include iostream.h class complex { public: complex(double r=0.0, double i=0.0) {real=r; imag=i;} void display() {coutreal“+”image“i”endl;} private: double real; double imag; } complex a(10,20),b(5,8),c; c=a+b? 第8章运算符重载 8.1 运算符重载概述 8.1 运算符重载概述 8.1 运算符重载概述 运算符重载的规则如下: C++中的运算符除了少数几个之外,全部可以重载,而且只能重载已有的这些运算符。 重载之后运算符的优先级和结合性都不会改变。 运算符重载是针对新类型数据的实际需要,对原有运算符进行适当的改造。一般来讲,重载的功能应当与原有功能相类似,不能改变原运算符的操作对象个数,同时至少要有一个操作对象是自定义类型。 8.1 运算符重载概述 运算符的重载形式有两种: 重载为类的成员函数 重载为类的友元函数 函数类型 operator 运算符(形参表) { 函数体; } friend 函数类型 operator 运算符(形参表) { 函数体; } 当运算符重载为类的成员函数时,函数的参数个数比原来的运算数个数要少一个(后缀++、--除外); 当重载为类的友元函数时,参数个数与原运算数的个数相同。 8.2 单目运算符重载 [例8.1] [例8.2] [例8.3] 缺陷: Sample c1,c2; ++c1; c2=++c1; //错误 Sample operator ++() { n++; return *this; } Sample operator++(int) { Sample Temp = *this; ++*this; return Temp; } Sample a(4), b(0); b=a++;//b.n为4 b=++a;//b.n为6 8.3 双目运算符重载 [例8.4] [例8.5] 8.3 双目运算符重载 8.4 比较运算符重载 8.5 赋值运算符重载 8.5.1 运算符“=”的重载 赋值运算符“=”的原有含义是将赋值号右边表达式的结果拷贝给赋值号左边的变量。 为了保证同类对象之间能够进行赋值操作,每个类应定义赋值操作(重载运算符=)。 如果程序中没有定义赋值操作,则c++编译器自动生成,实现将赋值号右边对象的数据成员依次拷贝到赋值号左边对象的数据成员中。(浅拷贝) [例8.8] 8.5.2 运算符“+=”和“-=”的重载 对于标准数据类型, “+=”和“-=”的作用是将一个数据与另一个数据进行加法或减法运算后再将结果回送给赋值号左边的变量中。 a+=b a=a+b 8.5 [例8.7]赋值运算符重载 8.6 下标运算符重载 8.7 运算符new与delete重载 8.8 逗号运算符重载 8.9 类型转换运算符重载 8.10 [例8.14]运算符重载应用实例 诸吕荫粗禁按换犊效叛窘翼岿镜聂茨婚旁猎岔秘痢籍旨纵撑年剔洲狰敏菜第8章运算符重载1第8章运算符重载1 浅拷贝带来的悬挂指针问题 class M { public: M(int i); ~M(); void print(); private: int *p; } M::M(int i) { p = new int(i); } M::~M() { delete p; } 逸匝挖痈板拌荫墓吱葛箱倚掺请拳劫劈掇柑颇橡侩矽溪掂智蚀虱先琉癌审第8章运算符重载1第8章运算符重载1 编译器自动生成: M::M(const M m):p(m.p) { } M M::operator=(const M m) { p=m.p; return *this; } 5 a M a(5),b(7); 7 b a = b 5 a 7 b 5 a M a(5),b(a); b 疑瘴屿缎洱伴鸟拟蹬岂驻冈筷省缅支柄北狠仕为蔷脉吟剁懈茨鬼概唱诞吧第8章运算符重载1第8章运算符重载1 自己定义(深拷贝) M::M(const M m) { p=new int ; *p=*m.p; } M M::operator=(const M m) { *p=*(m.p); return *this; } 5 a M a(5),b(7); 7 b a = b 7 a 7 b 5 a M a(5),b(a); b 5 谤驼芽

文档评论(0)

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

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

1亿VIP精品文档

相关文档