- 1、本文档共23页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第六章 运算符重载
* 6.1 运算符重载的语法 6.2 一元运算符 6.3 二元运算符的重载 6.4 特殊的运算符 6.4.1 =运算符的重载 6.4.2 ++和--运算符的重载 6.4.3 new 和delete运算符的重载 6.4.4 []的重载 第 6 章运算符重载 运算符重载是对已有的运算符赋予多重含义,使同一个运算符作用于 不同类型的数据导致不同类型的行为。它的主要优点之一就是用户自定义的数据类型可使用编译系统预定义的运算符。 运算符重载函数的一般形式为: 类型 类名::operator 重载的运算符 (参数列表) { 相关操作; } 定义一个重载的运算符是这个函数的名字必须以operator开头。 它的参数个数由以下两个因素决定: (1) 该操作符是一元操作符还是二元操作符 【 6.1 运算符重载的语法】 当运算符函数是全局函数时,需要在类中将该函数说明为友员。 复数类运算符重载 //EXAMPLE6_01.H #ifndef EXAMPLE6_01_H //用于防止文件的多重编译 #define EXAMPLE6_01_H #includeiostream.h class zComplex { double realpart; double imagpart; (2) 它是被定义为全局函数还是一个成员函数。如果是全局函数,那么对 于一元操作符它的参数个数就是1个(后置++、--除外),二元操作符 的参数个数是2个;如果是成员函数,那么对于一元操作符的参数个数 为0,二元操作符的参数个数为1。这是由于该类本身也作为一个操作 数参与计算,所以成员函数的参数要比全局函数的参数个数少1。 例 6-1 public: // 构造函数 zComplex(); zComplex(double r1,double i1); zComplex(const zComplex c); zComplex(double c){realpart = (double)c;imagpart = 0;} // 取复数的实部和虚部 double real(); double imag(); friend double real(const zComplex); friend double imag(const zComplex); //运算符重载为成员函数 zComplex operator+(const zComplex); zComplex operator-(const zComplex); zComplex operator*(const zComplex); zComplex operator/(const zComplex); zComplex operator=(const zComplex); (续) //运算符重载为友元函数 friend int operator ==(const zComplex,const zComplex); friend int operator !=(const zComplex,const zComplex); // show complex void print(); }; #endif (1)虽然运算符重载可以改变运算符原来的行为,但是它并不能改变运算符 的优先级、结合性、操作数的个数。也不能创建新的运算符,只能重载 现有的运算符。 运算符重载具有非常强的灵活性。在具体应用的时候要注意以下几点问题: 对于成员函数,一元运算符的参数为0;二元运算符的参数个数为1,如复数类中的==运算符,参数个数为2。对于友元函数,参数的个数与操作数个数相同。 (3)在重载运算符()、[]、-或者=时,运算符重载函数必须声明为类的一 个成员。对于其他的运算符,运算符重载函数可以是成员函数或者友元 函数。 (2)运算符重载函数的参数
文档评论(0)