关于c++运算符重载 + 和 ++ 运算符 【2013.10.18】

欢迎加入我们的QQ群,无论你是否工作,学生,只要有c / vc / c++ 编程经验,就来吧!158427611 


1.关于c++重载 + 和 ++ 运算符

大家都知道+ 和 ++ 作为成员函数被重载的时候的代码大概如下:

class Test{
.......
Test operate + (Test  &t)
{
	Test result (this.m_i + t.m_i);
	return result;
}
Test &operate ++ ()
{
	this->m_i ++;
	return *this;
}
........
private:
int m_i;
}

主要代码就是这样,那我就想问一下,为什么 重载 + 的时候返回的是Test 而++ 的时候是 Test & 引用?

返回引用的时候,程序员都知道不会产生临时变量,同样函数方法结束的时候,其中的栈数据被释放,那么如果是返回引用的话,对一下的方法:

Test a,b;

Test c = a + b;//假定 a b 都赋值了

c 中的 m_i将是一个随机值,不是 a+b的值,因为 a+b产生的临时变量已经消亡了。懂了吧。

再说 ++ 操作符,看一下代码先吧:

Test d;

++ ( ++d);

对于这样的写法,是一定没有错误的,程序员都没有异议哈,那么如果不是返回引用的话,++d 这里面执行了++方法,d++了一次,但是( ++d )内部产生的是一个临时变量,再 ++ ( ++d)的时候,++的就不是d了...那么违背了 我们的意愿,所以需要返回 引用!

另外主要 当运算符作为 成员函数重载的时候,会隐藏一个参数,传this....


还有一点 ++ 分为 a++ 和 ++a,二者的重载函数也是不一样的。

a++  为 Test operate ++ (int){}

++a  为 Test& operate ++(){}

注意a++返回与++a返回值的不同!

a-- 与 --a 同理


欢迎加入我们的QQ群,无论你是否工作,学生,只要有c / vc / c++ 编程经验,就来吧!158427611 

你可能感兴趣的:(关于c++运算符重载 + 和 ++ 运算符 【2013.10.18】)