c 的 算符 重载
11页1、C 的算符重载算符重载的作用是什么?它允许你为类的用户提供一个直觉的接口。算符重载允许C/C+的运算符在用户定义类型(类)上拥有一个用户定义的意义。重载的算符是函数调用的语法修饰:classFredpublic:/.;#if0/没有算符重载:Fredadd(Fred,Fred);Fredmul(Fred,Fred);Fredf(Freda,Fredb,Fredc)returnadd(add(mul(a,b),mul(b,c),mul(c,a);/哈哈,多可笑.#else/有算符重载:Fredoperator+(Fred,Fred);Fredoperator*(Fred,Fred);Fredf(Freda,Fredb,Fredc)returna*b+b*c+c*a;#endif算符重载的好处是什么?通过重载类上的标准算符,你可以发掘类的用户的直觉。使得用户程序所用的语言是面向问题的,而不是面向机器的。最终目标是降低学习曲线并减少错误率。有什么算符重载的实例?这里有一些算符重载的实例:myString+yourString可以连接两个std:string对象myDate+可以增加一个Dat
2、e对象a*b可以将两个Number对象相乘ai可以访问Array对象的某个元素x=*p可以反引用一个实际指向一个磁盘记录的smartpointer-它实际上在磁盘上定位到p所指向的记录并返回给x。但是算符重载使得我的类很丑陋;难道它不是应该使我的类更清晰吗?算符重载使得类的用户的工作更简易,而不是为类的开发者服务的!考虑一下如下的例子:classArraypublic:int&operator(unsignedi);inlineint&Array:perator(unsignedi)/.有些人不喜欢operator关键字或类体内的有些古怪的语法。但是算符重载语法不是被期望用来使得类的开发者的工作更简易。它被期望用来使得类的用户的工作更简易:intmain()Arraya;a3=4;/用户代码应该明显而且易懂.记住:在一个面向重用的世界中,使用你的类的人有很多,而建造它的人只有一个(你自己);因此你做任何事都应该照顾多数而不是少数。什么算符能/不能被重载?大多数都可以被重载。C的算符中只有.和?:(以及sizeof,技术上可以看作一个算符)。C+增加了一些自己的算符,除了:和.*,大多数
3、都可以被重载。这是一个下标算符的示例(它返回一个引用)。先没有算符重载:classArraypublic:int&elem(unsignedi)if(i99)error();returndatai;private:intdata100;intmain()Arraya;a.elem(10)=42;a.elem(12)+=a.elem(13);现在用算符重载给出同样的逻辑:classArraypublic:int&operator(unsignedi)if(i99)error();returndatai;private:intdata100;intmain()Arraya;a10=42;a12+=a13;我能重载operator=以便比较两个char来进行字符串比较吗?不行:被重载的算符,至少一个操作数必须是用户定义类型(大多数时候是类)。但即使C+允许,也不要这样做。因为在此处你应该使用类似std:string的类而不是字符数组,因为数组是有害的。因此无论如何你都不会想那样做的。我能为幂运算创建一个operator*吗?不行。运算符的名称、优先级、结合性以及元数都是由语言固定的。在C+中
4、没有operator*,因此你不能为类类型创建它。如果还有疑问,考虑一下x*y与x*(*y)等同(换句话说,编译器假定y是一个指针)。此外,算符重载只不过是函数调用的语法修饰。虽然这种特殊的语法修饰非常美妙,但它没有增加任何本质的东西。我建议你重载pow(base,exponent)(双精度版本在中)。顺便提一下,operator可以成为幂运算,只是优先级和结合性是错误的。如何为Matrix(矩阵)类创建下标运算符?Recentlychangedsoitusesnew-styleheadersandthestd:syntax(on7/00).ClickheretogotothenextFAQinthechainofrecentchanges.用operator()而不是operator。当有多个下标时,最清晰的方式是使用operator()而不是operator。原因是operator总是带一个参数,而operator()可以带任何数目的参数(在矩形的矩阵情况下,需要两个参数)。如:classMatrixpublic:Matrix(unsignedrows,unsignedcols);
《c 的 算符 重载》由会员小**分享,可在线阅读,更多相关《c 的 算符 重载》请在金锄头文库上搜索。
2020年高考真题——理科综合(全国卷Ⅲ)+Word版含答案
2021年绝味鸭脖策划书
2021年熟食店创业方案
2021年熟食店开店策划
2021年卤菜店创业计划书
2021年周黑鸭网络营销策划方案
东大21年1月考试《现代设计方法》考核作业
谈我国行政管理效率的现状及其改观对策(论文)
单证员考试-备考辅导-复习资料:无贸易背景信用证案分析.docx
土木工程毕业生答辩自述.docx
建筑学毕业后工作状态真实写照.doc
C#代码规范(湖南大学).doc
xx区食药监局2019年工作总结及2020年工作计划
2019年中医院药物维持治疗门诊工人先锋号先进事迹
2019年度xx乡镇林长制工作总结
2019年性艾科工作计划书
2019年人才服务局全国扶贫日活动开展情况总结
关于组工信息选题的几点思考
摘了穷帽子 有了新模样
2019年某集团公司基层党支部书记培训班心得体会
2024-04-08 33页
2024-04-08 10页
2024-04-08 25页
2024-04-08 12页
2024-04-08 10页
2024-04-08 21页
2024-04-08 40页
2024-04-08 34页
2024-04-08 28页
2024-04-08 28页