- 1、本文档共26页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
运算符重载及串类设计
第五章 运算符重载 多形性 一个接口,多个服务 一、编译时的多形性 运算符重载 函数重载 派生类中重定义基类成员函数 二、运行时的多形性 1)虚函数 如果在运行时才确定哪一个函数被调用,称为动态束定。 运算符重载 一、运算符函数 运算符函数名由关键字和重载的运算符组成。 形式: type operator 运算符(参数表) 使用 counter c1, c2(10); ... for (int i=1; i=10; ++ i) { ++ c1; - - c2; } ... cout c1= c1( ) c2= c2( ); ... 二、用成员函数重载运算符 例:复数类 class cp // complex { double rl, im; //real, imag public: cp(double r){rl=r; im=0;} cp(double r, double i) {rl=r; im=i;} cp operator+(const cp c); cp operator-(const cp c); cp operator-( ); cp operator=(const cp c); void print(); }; int main( ) { cp c1(2.5, 3.7), c2(4.2, 6.5); cp c(0); c = c1 + c2; c.print( ); return 0; } cp cp::operator+(const cp c) { double r = rl + c.rl; double i = im + c.im; cp sum(r, i); return sum; } cp cp::operator-(const cp c) { return cp(rl-c.rl, im-c.im); } cp cp::operator=(const cp c) { rl = c.rl; im = c.im; return *this; } cp cp::operator-( ) { return cp(-rl, -im); } void cp::print() { cout ( rl , im ) endl; } 要点 重载一元运算符的成员函数不能有参数。运算数是调用该运算符函数的对象。 例:cp operator-( ); 重载二元运算符的成员函数有一个参数,传递参加运算的另一个对象。 例:cp operator-(const cp c); cp operator=(const cp c); c1-c2 相当于调用 c1.operator-(c2); c3=c4 相当于调用 c3.operator=(c4); 恰当选择参数类型 为提高效率,通常传递常量引用。 4. 恰当选择返回类型 为什么要返回对象,或对象引用? (c1+c2)+c3 相当于 ( c1.operator+(c2) ).operator+( c3 ) c1=(c2=c3) 相当于 c1.operator=( c2.operator=(c3) ) 返回对象,还是返回对象引用? 如果运算修改了该对象(如=),应返回该对象自身,通常返回类型是引用。 如果运算没有修改该对象(如+,-,单目-)返回一新创建对象。 5. 通过构造函数进行类型转换 例: cp c1(2.5), c2(4.2, 6.5); c1 = c2 + 2.8; // c2.operator+ ( cp(2.8) ); c1 = 2.8 + c2; // (2.8).operator+(c2) ? 6. 成员函数重载的运算符仅作用于重载它的类。 三、用C函数重载运算符 例: class cp { ...... friend cp operator+(const cp c1, const cp c2); }; cp operator+(const cp c1, const cp c2) { double r = c1.rl + c2.rl; double i = c1.im + c2.im; return cp(r, i); } 2.8 + c2 ? operator+( cp(2.8), c2 ) 用C函数重载的是全局运算符 用C函数重载运算符比用成员函数多一个参数 有些运算符函数只能用成员函数: = 赋值类运算符, 包括 += -= .... ( ) 函数运算符 [ ] 下标运算符 - 指针运算符 四、重载赋值运算符 形式: X X::o
文档评论(0)