重载前++,后加加(用到了呀元)

#include <iostream>
using namespace std;
class Integer
{
	int x;
public:
	Integer(int x = 0):x(x){}
	friend ostream& operator<<
			  (ostream& o,const Integer& i)
			  {
			  		return o<<i.x;
			  }
	//重载成成员函数,取反到底是怎么运算的?
	const Integer operator~()
	{
		//返回的是临时值吗?就是它原本的值是不变的?草,真蛋疼,真想看看程序运行的时候变量的值是怎么变的。
		return Integer(~x);
	}

	//前加加
	Integer& operator++()
	{
		cout << "前加加" << endl;
		x++;
		//返回当前对象要使用引用
		return *this;
	}

	//后加加,哑元
	//返回的是临时值,不加引用
	//第一个const让其不能作为左值
	const Integer operator++(int)
	{
		cout << "后加加" << endl;
		//有意思,先用临时值保存当前对象,再将当前对象的值加一,参与计算的是old,这个值其实已经变了
		//最后返回的是未做改变的临时值
		Integer old = *this;
		x++;
		return old;
	}
	//有一个成员的一个友元的,调用优先?
	//重载成友元函数
	//单目运算符不采用成员函数方式重载?
	friend const Integer operator~(const Integer& i)/*这里非成员函数不能加const   why */
	{
		return Integer(~i.x);
	}
};



int main()
{
	Integer i1 = 100;
	cout << (~i1) << endl;  //返回的是临时的还是?非引用和指针。但是返回类型是对象。改变了它本来的值吗?
	int x = 10;
	++x = 100;  //运算优先级是怎么样子的?++在赋值号之前吗?对,优先级确实比赋值号高。
	//所以下一行输出结果为100就了然了。
	cout << "x = " << x << endl;
	++i1;
	cout << "i1 = " << i1 << endl;
	++i1 = 200;  //i1.operator++() = 200;
	cout << "i1 = " << i1 << endl;
	//x = 20;
	//x++ +30 ;   //50  表达式值为50,x++返回的是一个临时值,但是x的值已经成21了,
	//1.x++ x = 21
	//2.20 + 30
	//3.50
	//x++ = 300;   //左值无效,但是前加加可以赋值,说明后加加返回的是临时值,前加加返回的是。。它本身?真是这样的话,那么整个程序也算是说得通。
	i1 = 100;  //为什么可以直接赋值?
	//下两行没有任何理解问题,简单
	cout << "i++:" << i1++ << endl;
	cout << "++i:" << ++i1 << endl;
	//==================================

}
/*
-101
x = 100
前加加
i1 = 101
前加加
i1 = 200
后加加
i++:100
前加加
++i:102
*/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值