【C++学习笔记】运算符重载(二)

我们回顾一下运算符重载的特点:

  1. 运算符重载函数名必须为:operator<运算符>。
  2. 运算符的重载是通过运算符重载函数来实现的。对于二元运算符重载函数,函数的参数通常为一个即右操作数,运算符的左操作数为调用重载函数时的对象。对于一元运算符重载函数,运算符的左操作数或右操作数为调用函数的对象。
  3. 运算符重载函数的返回类型:若对象进行运算后的结果类型仍为元类型,则运算符重载函数的返回类型为原类型。

参数和返回值

接下来我们要仔细讲讲运算符重载的参数和返回值问题。

  1. 对于某些运算符(比如+、-)来说,我们往往只需要实现其运算功能,而不希望改变运算的参数。对于任何函数参数,如果仅需要从参数中读而不改变它,缺省地应当按const引用来传递它。普通算术运算符和布尔运算符不会改变参数,所以以const引用传递是使用的主要方式。当函数是一个类成员的时候,就转换为const成员函数普通算术运算符和布尔运算符不会改变参数,所以const引用传递是使用的主要方式。当函数是一个类成员的时候,就转换为const成员函数。只是对于会改变左侧参数的赋值运算符(像+=)和运算符‘=’,左侧参数才不是常量(constant),但因为参数将被改变,所以参数仍然按地址传递。
  2. 应该选择的返回值取决于运算符所期望的类型。如果运算符的效果是产生一个新值,将需要产生一个作为返回值的新对象。(这句其实有一点废话)
  3. 所有赋值运算符改变左值。为了使得赋值结果可以用于链式表达式(像A=B=C),应该返回刚刚改变了的左值的引用。这里返回值应该是一个nonconst引用。——因为这样方便进一步计算。

关于成员函数和友元函数的选择

下面这些原则可以帮我们确定是定义为成员函数还是友元函数:

  1. 赋值(=)、下标([])、调用(())和成员函数访问的箭头(->)等操作函数必须定义为成员函数
  2. 像赋值一样,符合赋值操作通常应定义为成员函数。但是定义成非成员函数一般也不会出错。
  3. 改变对象状态或与给定的类型紧密联系的其他操作符,如自增、自减等通常定义为成员函数(因为其设计对自身成员的操作)
  4. 对称的操作符,如算术运算符,相等操作符、关系操作符和位操作符,最好定义为非成员函数
    例子:
#include<iostream>
using namespace std;
class Complex
{
private:
	float real images;
public:
	Complex(float r = 0,float i = 0);
	friend Complex operator+(const Complex&,const Complex&);
	friend Complex operator-(const Complex&,const Complex &);
	Complex operator++();//定义前置运算符,括号里没有形参
	Complex operator++(int);//定义后置运算符,参数表中有int。
	friend Complex operator ++(Complex&);//定义友元时,要加上友元的引用
	friend Complex operator++(Complex&,int);
	
	
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值