面向对象的程序设计chapter.ppt

  1. 1、本文档共60页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
4.3 运算符重载 运算符重载为类的友元函数 友元运算符函数的定义 type operator @(参数表) { //函数体 } 4.3 运算符重载 运算符重载为类的友元函数 双目运算符重载为类的友元函数 运算符函数参数表有两个参数。 两个操作数依次传递给运算符函数的两个参数。 采用友元函数重载双目运算符@后,有两种调用方式。 objectX@objectY; //隐式调用 operator@(objectX , objectY); //显式调用 4.3 运算符重载 运算符重载为类的友元函数 双目运算符重载为类的友元函数 例4.2 重载复数的“+”运算符为复数类的友元函数形式 class Complex{ friend Complex operator+(Complex x, Complex y); private: double real; double image; public: //… }; 4.3 运算符重载 inline Complex operator+(Complex x, Complex y) { return Complex(x.real+y.real, x.image+y.image); } Complex a(2.3, 4.6), b(3.6, 2.8), c; c = a + b; //c = operator+(a, b); c.Print(); 4.3 运算符重载 运算符重载为类的友元函数 单目运算符重载为类的友元函数 运算符函数参数表只有一个参数。 当前对象作为一个显式的操作数传递给形参。 例子: 4.3 运算符重载 class coord{ int x, y; public: coord(int i = 0, int j = 0):x(i), y(j){} void print() { cout<<"x:"<<x<<","<<"y:"<<y<<endl; } friend coord operator-(coord &op); }; coord operator- (coord &op) { op.x = - op.x; op.y = - op.y; return op; } 4.3 运算符重载 void main() { coord ob1(10, 20), ob2; ob1.print(); ob2 = - ob1; //ob2 = operator-(ob1); ob2.print(); } 程序运行结果: x=10, y=20 x=-10, y=-20 4.3 运算符重载 两种运算符重载方法的比较 双目运算符 成员运算符函数带一个参数,而友元运算符函数带两个参数。 对单目运算符 成员运算符函数不带参数,而友元运算符函数带一个参数。 成员运算符函数和友元运算符都可用习惯方式调用,也可用它们的专用方式调用。 例如: 4.3 运算符重载 两种运算符重载方法的比较 习惯形式 成员函数调用形式 友元函数调用形式 a + b a.operator + (b) operator + (a, b) -a a.operator – () operator – (a) a ++ operator ++ (0) operator ++ (a, 0) 4.3 运算符重载 两种运算符重载方法的比较 例4.4 测试2.3+a和a+2.3, 其中2.3是double类型,a是Complex类型。 表达式2.3+a “+”重载为类的友元函数时,系统内部表示为: operator+(Complex(2.3), a); “+”重载为类的成员函数时,系统内部表示为: 2.3.operator+(a); //error 4.3 运算符重载 两种运算符重载方法的比较 例4.4 测试2.3+a和a+2.3, 其中2.3是double类型,a是Complex类型。 表达式a+2.3 “+”重载为类的友元函数时,系统内部表示为: operator+(a, Complex(2.3)); “+”重载为类的成员函数时,系统内部表示为: a.operator+(Complex(2.3)); 4.3 运算符重载 运算符重载准则 双目运算符将它重载为一个友元运算符函数比重载为一个成员运算符函数便于使用。 单目运算符++和--等一般应重载为成员函数。 C++规定,赋值运算符函数operator=必须设计为类的成员函数。 函数调用运算符()和运算符[]应重载为成员函数。 输入运算符>>和输出运算符<<必须重载为友元函

文档评论(0)

浪漫唯美-文档菜鸟 + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档