- 1、本文档共32页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
4.6运算符重载
版本号:V2006.12;运算符重载
特殊运算符的重载; 运算符的重载就是赋予已有的运算符多重含义。C++中通过重新定义运算符,使它能够用于特定的对象、执行特定的功能,从而增强C++的语言的扩充能力。
运算符重载函数定义的一般格式为:
type className::operator @(Arg);
Type: 为函数返回值的类型;
ClassName: 为运算符重载函数所在的类名;
@:为要重载的运算符;
Arg: 函数的参数列表;
Operator:是关键字,说明其后的运算符为重载运算符,便于编译器识别;;运算符的重载函数有两种形式
1. 重载为类的成员函数
2. 重载为类的友员函数;#includeiostream.h
class Complex{
float Real, Image;
public:
Complex(float r=0, float i=0){Real=r; Image=i;}
float GetR( ){ return Real;}
float GetI( ){ return Image;}
void Show( )
{ coutReal=Real\tImage=Image\n;}
Complex operator +(Complex ); //重载+运算符
Complex operator +(float); //重载+运算符
void operator +=(Complex ); //重载+=运算符
void operator =(Complex ); //重载=运算符
};;Complex Complex::operator +(Complex c)
{
Complex t;
t.Real=Real+c.Real;
t.Image=Image+c.Image;
return t;
}
Complex Complex::operator+(float s)
{
Complex t;
t.Real=Real+s;
t.Image=Image;
return t;
};void Complex::operator+=(Complex c)
{
Real=Real+c.Real;
Image=Image+c.Image;
}
void Complex::operator=(Complex c)
{
Real=c.Real;
Image=c.Image;
};void main(void) {
Complex c1(25, 50), c2, c3(100,200);
Complex c, c4(200,400);
c1.Show();
c2=c1; //c2.operator=(c1)
c2.Show();
c=c1+c3;
c.Show();
c+=c1; //c.operator+=(c1);
c.Show();
c4+=c1+c2; //A
c4.Show();
c4=c4+200; //B
c4.Show();
};说明:程序中出现的表达式
c1+c2
编译程序将其解释为:
c1.operator+(c2);
其中,c1和c2是complex类的对象,而operator+( )是运算符“+”的重载函数。
同理
c1-c2
解释为:
c1.operator-(c2);
因此:A行 c4+=c1+c2; 被解释为:
c4.operaotr+=(c1.operaotr+(c2));
;对应于二元运算c1+c2,运算符重载函数operaotr+(complex c)仅有一个参数c,可见,当重载为类的成员函数时,双目运算符仅有一个参数,对单目运算符,重载为成员函数时,则不需要带参数。;运算符的重载的几点注意:;; 运算符重载函数还可以为友元函数。当重载为友元函数时,由于友元函数不是类的成员函数,尽管它可以访问类的 所有成员(包括私有成员),但必须通过类的对象才能实现这种访问,因此当运算符重载为友元函数时,对于双目运算,友元函数必须有2个参数,对于单目运算符,友元函数也必须有一个参数。
注意,有些运算符不能重载为友元函数,它们是:
=,(),[ ]和-。;重载一元运算符的友元函数的格式为:
type operator @(参数)
参数:对于“++”,“--”一元运算符来说为类对象的引用,对于“-”一元运算符来说,可以为对象的引用也可为对象;
重载二元运算符的友元函数的格式为:
type operator @(参数1, 参数2)
两个参数中至少一个是类的对象;
;例:用友元运算符实现复数的运算,包括二元运算符+,一元运算符-,用成员函数实
您可能关注的文档
- 3第2章汉字的产生、性质与字体演变.ppt
- 3章地球化学9、10_谢.ppt
- 3相异步电动机认识实验a.ppt
- 3程控数字交换和电话通信网.ppt
- 3盟SANMENGS208产品培训.ppt
- 3焊接工艺-熔化极气体保护焊.ppt
- 3第2章个案工作的价值体系.ppt
- 3第3章房地产估价概述.ppt
- 3第3章刚体的定轴转动.ppt
- 3第2章财政支出基本理论.ppt
- 2025年湖北省文化旅游投资集团有限公司人员招聘笔试模拟试题及答案详解(易错题).docx
- 山东财金集团简介有答案详解.docx
- 2025浙江衢州市技师学院招聘高层次紧缺人才5人笔试模拟试题及参考答案详解一套.docx
- 2025福建海峡联合研究院冷冻电镜平台人才招聘6人笔试模拟试题及答案详解(名校卷).docx
- 2025年山东铁路投资控股集团有限公司招聘笔试备考试题附答案详解(典型题).docx
- 2025年厦门港务控股集团有限公司招聘笔试备考试题及答案详解(夺冠系列).docx
- 2025年省国有资本运营控股集团有限公司校园招聘笔试备考试题参考答案详解.docx
- 文案内容简介4s k e call of pripyat-manualS T K E R CAL.pdf
- 段落信息定位答案.pdf
- 甲胺专着2587 cephalexin capsules2586-头孢蛋白胶囊.pdf
文档评论(0)