- 1、本文档共5页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 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 iostreamusing namespace std;
class Complex{private:double real;double image;public:C
您可能关注的文档
- 相交线中的角讲课稿V3(非常好).ppt
- 牛津模块六project.ppt
- Lotus常用公式总结.doc
- 作文分层教学说课稿.doc
- 机械故障诊断学第4章_振动诊断的理论基础.ppt
- 煤矿地质2.3.ppt
- 四六级作文高分句型.doc
- 赵湾乡中心广场建设项目可行性报告.doc
- 语文八校答案.doc
- 人教版小学数学二年级下第8单元试卷.doc
- 2024年湖南省高考英语试卷(含答案解析)+听力音频+听力原文.docx
- 2024年江西省高考英语试卷(含答案解析)+听力音频+听力原文.docx
- 2024年安徽省高考英语试卷(含答案解析)+听力音频+听力原文.docx
- 2024年福建省高考英语试卷(含答案解析)+听力音频+听力原文.docx
- 2024年广东省高考英语试卷(含答案解析)+听力音频+听力原文.docx
- 2024年河北省高考英语试卷(含答案解析)+听力音频+听力原文.docx
- 2024年河南省高考英语试卷(含答案解析)+听力音频.docx
- 2024年湖北省高考英语试卷(含答案解析)+听力音频+听力原文.docx
- 2024年湖南省高考英语试卷(含答案解析)+听力音频+听力原文.docx
- 2024年江苏省高考英语试卷(含答案解析)+听力音频+听力原文.docx
最近下载
- 贵州省贵阳市普通中学2021-2022学年高一上学期信息技术期末监测考试试卷.docx VIP
- PCB镀铜针孔专案改善报告.ppt
- 体表肿块切除操作评分标准.doc
- (苏教版)数学二年级上册寒假作业计算题“天天练”,含30份题组,附参考答案.doc
- 2023年福建考评员考试答案.docx VIP
- 第二单元跨学科实践活动1微型空气质量“检测站”的组装与使用课件-九年级化学人教版(2024)上册.pptx
- 数学核心素养在小学教育中的具体应用教学研究课题报告.docx
- 人防工程战时给排水设备安装深度及注意问题.pptx
- 上海交通大学《社会心理学》内部题库练习期末真题汇编及答案.pdf
- 《工程制图及 CAD》课程思政教学案例(一等奖).docx
文档评论(0)