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

VC编程问题.doc

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

运算符重载:友元(friend)函数问题 版权声明:转载时请以超链接形式标明文章原始出处和作者信息及本声明 /logshtml 运算符在重载的时候有两种方式,一是成员函数方式,二是成友元(friend)函数方式。 成员函数比较简单。下面是一个示例代码: class Complex { private: double real; double img; public: Complex(){} Complex(double i,double j):real(i),img(j) { } ??????? Complex operator+(const Complex cx) ??????? { ??????????????? return Complex(real+cx.real,img+cx.img); ??????? } }; 如果是设置成友元函数,一定要注意: (1)当重载友元函数时,将没有隐含的参数this指针。这样,对双目运算符,友元函数有2个参数,对单目运算符,友元函数有一个参数。 (2)有些运行符不能重载为友元函数,它们是:=,(),[]和->。 因此,上面那个+运算符如果是重载为友元函数的话,应该写成: class Complex { private: ??? double real; ??? double img; ??? public: ??? Complex(){} ??? Complex(double i,double j):real(i),img(j) ??? { ??? } ??? //? 注意: 有两个参数 ??? friend Complex operator+(const Complex cx1,const Complex cx2) ??? { ??????? return Complex(cx1.real+cx2.real,cx1.img+cx2.img); ??? } ??? void Out() ??? { ??????? cout real + img i endl; ??? } }; 还需要注意一点,有的VC 6.0编译器在编译上面代码的时候会报错,错误为: fatal error C1001: INTERNAL COMPILER ERROR 原因是VC编译器本身的问题。 解决办法: 在类的声明之前再加上一个声明。具体代码如下: class Complex; Complex operator+(const Complex cx1,const Complex cx2); class Complex { private: double real; double img; public: Complex(){} Complex(double i,double j):real(i),img(j) { } // 注意:有两个参数 friend Complex operator+(const Complex cx1,const Complex cx2) { return Complex(cx1.real+cx2.real,cx1.img+cx2.img); } void Out() { cout real + img i endl; } }; 这样就没有问题了。 2.重载为类的成员函数,这样运算符函数可以自由的访问本类的数据成员。 返回值 类名::opertaor 运算符(形参表) { 函数体; } 其中: 类名是需要重载该运算符的类,如果在类中定义运算符函数,类名与作用域 可以省... operator 与运算符一起构成运算符的函数名; 注意了: 当运算符重载为类的成员函数时,函数的个数将比原来的操作数个数少一个 :原因是通过对象的调用该运算符时,对象本身充当 了运算符函数最左边的操作数 少了的操作数就是其本省。 如果是重载运算符函数是双目运算符,那么,运算符的一个操作数是对象本身,可有this 指针指出,另一个操作数则需要通过运算符重载函数的参数表给出; @:双目运算符重载为类的成员函数,函数只显示说明一个参数,该形参是运算符的右操作数 @:前置单目运算符重载为类的成员函数时,不需要显式参数,既函数没有形参 @:后置单目运算符重载为类的成员函数时,为了与前置单目运算符区别,函数要加一个整形 形参; 还是以重载复数类数据运算为例子 #include iostream using namespace std; class Complex { private: double real; double image; public: C

文档评论(0)

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

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

版权声明书
用户编号:8130065136000003

1亿VIP精品文档

相关文档