- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
5.3运算符重载
5.3 运算符重载 5.3.1 运算符重载的必要性 int a,b; a=10, b=20; couta+bendl; C++中的运算符的操作对象只能是基本数据类型 对于很多用户自定义类型(比如类),也需要类似的运算操作。 class Com //复数 { double real; //实部 double imag; //虚部 public: Com(double r, double i) { real=r; imag=i; } void display( ) { coutreal“ “imag; } }; Com a,b; a.set(10, 20); b.set(5, 8); 自己编写代码来说明两个复数对象相加的操作,‘十’号作用于两个复数对象。 这种操作就是‘十’运算符重载。 运算符重载是对已有的运算符赋予多重含义,使同一个运算符作用于不同类型的数据时导致不同的行为。 运算符重载的实质即函数重载。 5.3.2 运算符重载的规则 C++中的运算符除了少数几个外,全部可以重载,而且只能重载C ++中已经有的运算符。 重载之后运算符的优先级和结合性都不会改变。 运算符重载是针对新类型数据的实际需要,对原有操作符进行适当的改造。重载的功能应与原有功能相类似,不能改变原操作符的操作对象个数,同时至少要有一个操作对象是自定义类型。 不能重载的操作符有五个 · ·* :: sizeof() ? :(条件表达式) 运算符重载函数的意义 运算符定义就是函数定义,调用运算符就是调用函数 例如:Com operator+(Com a, Com b) { Com s; s.real=a.real + b.real; s.imag=a.imag+ b.imag; return s; } Com p(3, 2); Com q(1, 5); Com c = p+q; //p + q 等价于 operator+(p, q) 在实现过程中,首先把指定的运算表达式转化为对运算符函数的调用,运算对象转化为运算符函数的实参,然后根据实参的类型来确定需要调用的函数。(编译过程中完成) 5.3.3 使用友元函数重载运算符 运算符也可以重载为类的友元函数,这样,它就可以自由地访问该类的任何数据成员。 此时,运算所需要的操作数都需要通过函数的形参来传递,形参表中从左到右的顺序即运算符操作数的顺序。 双目运算符重载为友元函数实例 class Com { double real; double imag; public: Com(double r, double i) { real=r; imag=i; } friend Com operator+(Com a, Com b) }; Com operator+(Com a, Com b) { Com s; s.real=a.real + b.real; s.imag=a.imag + b.imag; return s; } 单目运算符重载为友元函数实例 class AB { int a,b; public: AB(int x, int y) { a=x; b=y; } friend AB operator-(AB obj); }; AB operator-(AB obj) { obj.a=-obj.a; obj.b=-obj.b; return obj; } 5.3.4 使用成员函数重载运算符 C++中,可以将运算符函数定义为某个类的成员函数,可以自由地访问本类的数据成员,称为成员运算符函数。 双目运算符:一个操作数为对象本身的数据,由this指针指出;另一个则需要通过运算符重载函数的参数表来传递。 单目运算符:操作数由对象的this指针给出,不再需要任何参数。 成员运算符(双目运算符实例) 1 运算符重载为友元函数: Com operator+(Com a, Com b) { Com s; s.real=a.real + b.real; s.imag=a.imag + b.imag; return s; } 2 运算符重载为成员函数: Com operator+(Com b)
文档评论(0)