C++中++,--操作符重载需要说明是++(--)在操作数前面,还是在操作数后面,区别如下:
代码经过测试无误(起码我这里没问题^_^)
Code
1#include <iostream>
2#include <cstdlib>
3using namespace std;
4template<typename T> class A
5{
6public:
7 A(): m_(0){
8 }
9 // +
10 const T operator + (const T& rhs)
11 {
12 // need to be repaired , but see it is only a demo
13 return (this->m_ + rhs);
14 }
15 // -
16 const T operator - (const T& rhs){
17 // need to be repaired , but see it is only a demo
18 return (this->m_ - rhs);
19 }
20 T getM(){
21 return m_;
22 }
23
24 // ++在前的模式,这里返回的是引用 ,准许++++A
25 A& operator ++ (){
26 (this->m_)++;
27 return *this;
28 }
29 // ++ 在后,这里返回的是一个新的A类型变量,且不可改变
30 // 目的是防止出现 A++++情况
31 const A operator ++(int a){
32 A<T> b = *this;
33 (this->m_)++;
34 return b;
35 }
36private:
37 T m_;
38};
39
40
41int main(void){
42 int i = 0;
43 cout<<++++i<<endl;
44 // i++++ is not allowed
45 A<int> a;
46 A<int> b = ++a;
47 cout<<b.getM()<<endl;
48 A<int> c = a++;
49 cout<<c.getM()<<endl;
50 cout<<a.getM()<<endl;
51 int t = a+2;
52 cout<<t<<endl;
53 system("pause");
54 return 0;
55
56}
1#include <iostream>
2#include <cstdlib>
3using namespace std;
4template<typename T> class A
5{
6public:
7 A(): m_(0){
8 }
9 // +
10 const T operator + (const T& rhs)
11 {
12 // need to be repaired , but see it is only a demo
13 return (this->m_ + rhs);
14 }
15 // -
16 const T operator - (const T& rhs){
17 // need to be repaired , but see it is only a demo
18 return (this->m_ - rhs);
19 }
20 T getM(){
21 return m_;
22 }
23
24 // ++在前的模式,这里返回的是引用 ,准许++++A
25 A& operator ++ (){
26 (this->m_)++;
27 return *this;
28 }
29 // ++ 在后,这里返回的是一个新的A类型变量,且不可改变
30 // 目的是防止出现 A++++情况
31 const A operator ++(int a){
32 A<T> b = *this;
33 (this->m_)++;
34 return b;
35 }
36private:
37 T m_;
38};
39
40
41int main(void){
42 int i = 0;
43 cout<<++++i<<endl;
44 // i++++ is not allowed
45 A<int> a;
46 A<int> b = ++a;
47 cout<<b.getM()<<endl;
48 A<int> c = a++;
49 cout<<c.getM()<<endl;
50 cout<<a.getM()<<endl;
51 int t = a+2;
52 cout<<t<<endl;
53 system("pause");
54 return 0;
55
56}