重载运算符——前置++和后置++

1>为区别前置和后置运算符,需要在后置运算符函数中加参数“int”,虽然这个类型在此除了以示区别之外并不代表任何实际含义;

2>前置返回的是变量的引用,后置返回的是常量。所以++++c合法,而c++++不合法,这一点可以在VC 6.0和DEV C++中采用基本数据类型的++操作来验证;

3>为什么不让c++++也合法呢?如果要实现c++++合法,必须使后置返回变量或变量的引用。c++是先返回c值再+1,所以不可能返回c,那就只能先建立局部变量来保存c的初值,然后再返回局部变量(局部变量不允许返回引用),但返回了局部变量之后,如果再连着进行下一次++运算,参与运算的就是这个局部变量的值了,所以此时c++++其实等效与c++,也就没有存在的意义了。

 

#include <iostream>

using namespace std;

class Complex
{
	friend ostream &operator<<(ostream &out, const Complex &c);
private:
	int m_a;
	int m_b;
public:
	Complex();
	Complex(int a, int b);
	Complex operator++(int);   //后置++,需要占位参数与前置++ 区分开
	Complex &operator++();     //前置++
};

Complex::Complex()
{
	
}

Complex::Complex(int a, int b)
{
	m_a = a;
	m_b = b;
}

//重载后,调用'<<'能够直接输出一个复数形式
ostream &operator<<(ostream &out, const Complex &c)
{
	out << c.m_a << " + " << c.m_b << "i";
	return out;
}

//返回值是Complex类的对象,
Complex Complex::operator++(int)	//后置++,不是引用,不能进行连续使用
{
	Complex tmp = *this;	//因为后置++ 是先使用再++,所以用对象tmp 记录自身++之前的情况,并返回tmp
	this->m_a++;
	this->m_b++;

	return tmp;
}

//返回值是引用Complex类的对象
Complex &Complex::operator++()		//前置++,是引用,方便进行连续使用
{
	this->m_a++;		//因为前置++ 是先++再使用,所以直接++,并返回自身
	this->m_b++;

	return *this;
}

int main()
{
	Complex c(1, 2);
	
	cout << c++ << endl;
	cout << ++c << endl;

	return 0;
}
	

 

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值