十一算符函数重载与流输入输出操作.pdf
上传人:sy****28 上传时间:2024-09-12 格式:PDF 页数:12 大小:107KB 金币:16 举报 版权申诉
预览加载中,请您耐心等待几秒...

十一算符函数重载与流输入输出操作.pdf

十一算符函数重载与流输入输出操作.pdf

预览

免费试读已结束,剩余 2 页请下载文档后查看

16 金币

下载此文档

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

十一.算符函数重载与流输入输出操作⒈算符函数重载(OperatorOverloading)①算符函数重载的声明C++语言中允许部分运算符号充当函数名从而构成算符函数。但算符函数的重载与普通函数的重载有一定的区别。算符函数重载的声明格式是:类型operatorC++语言支持的算符(参数描述表);例1:C++语言示例#include?stdio.h?classComplex{doubler,i;public:Complex(doublers=0.,doubleis=0.):r(rs),i(is){}Complexoperator+(constComplex&add_2){returnComplex(r+add_2.r,i+add_2.i);}Complexoperator?(constComplex&sub_2){returnComplex(r?sub_2.r,i?sub_2.i);}voidoperator!();};voidComplex::operator!(){if(i?=0)printf("%.2f+%.2fi\n",r,i);elseprintf("%.2f%.2fi\n",r,i);}voidmain(){Complexa(3.,9.),b(7.,8.),c(0.,0.);c=a.operator+(b);//当执行完此表达式后将执行析构函数printf("a+b=");c.operator!();c=b.operator?(a);printf("b?a=");c.operator!();}但在C#语言中运算符做重载时的限制则要更加严厉。首先算符函数的附加类型只能是publicstatic(系统级类方法)。其次,算符函数的参数的数量与运算符的元数完全相同,而且还必须是该函数所在的类对象。第三,算符函数必须声明有效的返回类型(不允许void)。第四,引用时只能使用简化格式。例2:C#语言示例usingSystem;classComplex{doubler,i;publicComplex(doublerx,doubleix){r=rx;i=ix;}publicstaticComplexoperator+(Complexx1,Complexx2){returnnewComplex(x1.r+x2.r,x1.i+x2.i);}publicstaticComplexoperator-(Complexx1,Complexx2){returnnewComplex(x1.r-x2.r,x1.i-x2.i);}publicstaticintoperator!(Complexx){if(x.i>=0)Console.WriteLine(x.r.ToString()+"+"+x.i.ToString()+"i");elseConsole.WriteLine(x.r.ToString()+""+x.i.ToString()+"i");return0;}staticvoidMain(){Complexa=newComplex(3,9),b=newComplex(7,8),c=newComplex(0,0);c=a+b;//当执行完此表达式后将执行析构函数intd=!c;c=b-a;d=!c;}};②引用重载算符函数的简化·取消关键词"operator"、对象连接符号和括号;·按原算符语意重组操作数(常)变量与算符的位置;按上述两条准则,则上例中的表达式"c=a.operator+(b);"便可改写为:"c=a+b;"。其余的可类推。推论:已知有:"A&operator+(A&);"的声明和classA的对象a、b、c,则"a.operator(b).operator+(c));"可简化为:"a+b+c;"。再考虑:"a+b+c+10"应如何分解?③使用算符函数重载的限制·只能使用C++算符的大部分,对"=、()、[]、->"算符限制使用,对诸如".*、∷、?:、#、##"等算符是禁止使用的。·C#语言允许重载的运算符如下表:运算符可重载性+,-,!,~,++,--,true,false可以重载这些一元运算符。+,-,*,/,%,&,|,^,<<,>>可以重载这些二进制运算符。==,!=,<,>,<=,>=可以重载这些比较运算符(但请参阅下面的说明)。&&,||不能重载条件逻辑运算符,但可使用&和|对其进行计算,可以重载&和|;请参阅7.11.2用户定义的条件逻辑运算符。[]不能重载数组索引运算符,但可定义索引器。()不能重载转换运算符,但可定义新的转换运算符(请参阅explici