关于c++运算符重载 + 和 ++ 运算符 【2013.10.18】
2013-10-21 09:18
274 查看
欢迎加入我们的QQ群,无论你是否工作,学生,只要有c / vc / c++ 编程经验,就来吧!158427611
1.关于c++重载 + 和 ++ 运算符
大家都知道+ 和 ++ 作为成员函数被重载的时候的代码大概如下:
主要代码就是这样,那我就想问一下,为什么 重载 + 的时候返回的是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
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++运算符的重载
- 关于重载提取运算符'<<'在VC6.0环境下产生二义性(ambiguous)的解决办法
- 重载前置,后置(自增运算符 ++ 和自减运算符 --)
- 关于++和--运算符
- 关于++运算符在java与c里面的区别
- 关于C++运算符的重载
- 关于运算符 前置 ++ 和后置++ (--)
- 关于C#相等运算符(==)重载的问题
- 关于C++中操作符重载的疑问 :四个运算符=, ->, [], ()不可以重载为全局函数(友员函数)
- 重载_,“+, -, --, ++”运算符
- 关于运算符 前置 ++ 和后置++ (--)
- C++运算符重载——输入/输出运算符
- 《关于C++中运算符的重载》
- 关于前后缀递增++和递减--运算符的一点区别
- 多关键字排序(里面有关于操作符(<<运算符 和 >>运算符 )的重载)
- 关于++和--运算符的理解
- 关于运算符"operator<<"重载出错解决方法
- 重载前置,后置(自增运算符 ++ 和自减运算符 --)
- 关于C++中操作符重载的疑问 :四个运算符=, ->, [], ()不可以重载为全局函数(友员函数)
- 关于++和--运算符的理解