C++左移运算符重载第二参数问题(与后置++运算符重载联用)

以下为黑马程序员C++递增运算符重载正确代码,这套代码涉及到++运算符重载与<<运算符重载的联合使用。

值得提出的问题:

在左移运算符<<重载中,为什么第二个参数不能使用&引用?使用引用时会报错。

分析其中的原因及分析过程:

需要注意区分的是(1)在前置++运算符重载与<<运算符重载联用的过程中,<<运算符重载第二参数使用引用不会报错;(2)在后置++运算符重载与<<运算符重载联用的过程中,<<运算符重载第二参数使用引用会报错;

(1)前置++运算符重载,重载函数返回的值是引用类型,即MyInteger类中的本对象,这个对象是早已存在的对象。

(2)后置++运算符重载,重载函数返回的值是值类型,即MyInteger类中的一个临时对象,这个对象在后置++运算符重载函数运行完毕即消失。

(3)在前置++运算符与<<运算符重载联用过程,如果第二参数使用&,没有问题,这是因为&后面的对象不会消失。

(4)在后置++运算符与<<运算符重载联用过程,如果第二参数使用&,有问题,这是因为&后面的对象会消失。在输出之前已经消失了,再也输出不了任何东西,所以会报错。

class MyInteger {

	friend ostream& operator<<(ostream& out, MyInteger myint);

public:
	MyInteger() {
		m_Num = 0;
	}
	//前置++
	MyInteger& operator++() {
		//先++
		m_Num++;
		//再返回
		return *this;
	}

	//后置++
	MyInteger operator++(int) {
		//先返回
		MyInteger temp = *this; //记录当前本身的值,然后让本身的值加1,但是返回的是以前的值,达到先返回后++;
		m_Num++;
		return temp;
	}

private:
	int m_Num;
};


ostream& operator<<(ostream& out, MyInteger myint) {
	out << myint.m_Num;
	return out;
}


//前置++ 先++ 再返回
void test01() {
	MyInteger myInt;
	cout << ++myInt << endl;
	cout << myInt << endl;
}

//后置++ 先返回 再++
void test02() {

	MyInteger myInt;
	cout << myInt++ << endl;
	cout << myInt << endl;
}

int main() {

	test01();
	//test02();

	system("pause");

	return 0;
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值