![](https://i-blog.csdnimg.cn/blog_migrate/8f900a89c6347c561fdf2122f13be562.gif)
![ExpandedBlockStart.gif](https://i-blog.csdnimg.cn/blog_migrate/961ddebeb323a10fe0623af514929fc1.gif)
1
#include
<
iostream
>
2 using namespace std;
3
4 class Integer
5 {
6 long i;
7 Integer * This() { return this ; }
8 public :
9 Integer( long ll = 0 ) : i(ll) {}
10 friend const Integer & operator + ( const Integer & a);
11 friend const Integer operator - ( const Integer & a);
12 friend const Integer operator ~ ( const Integer & a);
13 friend Integer * operator & (Integer & a);
14 friend int operator ! ( const Integer & a);
15 friend const Integer & operator ++ (Integer & a);
16 friend const Integer operator ++ (Integer & a, int );
17 friend const Integer & operator -- (Integer & a);
18 friend const Integer operator -- (Integer & a, int );
19 };
20
21 const Integer & operator + ( const Integer & a)
22 {
23 cout << " +Integer\n " ;
24 return a;
25 }
26
27 const Integer operator - ( const Integer & a)
28 {
29 cout << " -Integer\n " ;
30 return Integer( - a.i);
31 }
32
33 const Integer operator ~ ( const Integer & a)
34 {
35 cout << " ~Integer\n " ;
36 return Integer( ~ a.i);
37 }
38
39 Integer * operator & (Integer & a)
40 {
41 cout << " &Integer\n " ;
42 return a.This();
43 }
44
45 int operator ! ( const Integer & a)
46 {
47 cout << " !Integer\n " ;
48 return ! a.i;
49 }
50
51 const Integer & operator ++ (Integer & a)
52 {
53 cout << " ++Integer\n " ;
54 a.i ++ ;
55 return a;
56 }
57
58 const Integer operator ++ (Integer & a, int )
59 {
60 cout << " Integer++\n " ;
61 Integer before(a.i);
62 a.i ++ ;
63 return before;
64 }
65
66 const Integer & operator -- (Integer & a)
67 {
68 cout << " --Integer\n " ;
69 a.i -- ;
70 return a;
71 }
72
73 const Integer operator -- (Integer & a, int )
74 {
75 cout << " Integer--\n " ;
76 Integer before(a.i);
77 a.i -- ;
78 return before;
79 }
80
81 void f(Integer a)
82 {
83 + a;
84 - a;
85 ~ a;
86 Integer * ip = & a;
87 ! a;
88 ++ a;
89 a ++ ;
90 -- a;
91 a -- ;
92 }
93
94 class Byte
95 {
96 unsigned char b;
97 public :
98 Byte(unsigned char bb = 0 ) : b(bb) {}
99 const Byte & operator + () const
100 {
101 cout << " +Byte\n " ;
102 return * this ;
103 }
104
105 const Byte operator - () const
106 {
107 cout << " -Byte\n " ;
108 return Byte( - b);
109 }
110
111 const Byte operator ~ () const
112 {
113 cout << " ~Byte\n " ;
114 return Byte( ~ b);
115 }
116
117 Byte operator ! () const
118 {
119 cout << " !Byte\n " ;
120 return Byte( ! b);
121 }
122
123 Byte * operator & ()
124 {
125 cout << " &Byte\n " ;
126 return this ;
127 }
128
129 const Byte & operator ++ ()
130 {
131 cout << " ++Byte\n " ;
132 b ++ ;
133 return * this ;
134 }
135
136 const Byte operator ++ ( int )
137 {
138 cout << " Byte++\n " ;
139 Byte before(b);
140 b ++ ;
141 return before;
142 }
143
144 const Byte & operator -- ()
145 {
146 cout << " --Byte\n " ;
147 -- b;
148 return * this ;
149 }
150
151 const Byte operator -- ( int )
152 {
153 cout << " Byte--\n " ;
154 Byte before(b);
155 -- b;
156 return before;
157 }
158 };
159
160 void g(Byte b)
161 {
162 + b;
163 - b;
164 ~ b;
165 Byte * bp = & b;
166 ! b;
167 ++ b;
168 b ++ ;
169 -- b;
170 b -- ;
171 }
172
173 int main()
174 {
175 Integer a;
176 f(a);
177 Byte b;
178 g(b);
179 }
2 using namespace std;
3
4 class Integer
5 {
6 long i;
7 Integer * This() { return this ; }
8 public :
9 Integer( long ll = 0 ) : i(ll) {}
10 friend const Integer & operator + ( const Integer & a);
11 friend const Integer operator - ( const Integer & a);
12 friend const Integer operator ~ ( const Integer & a);
13 friend Integer * operator & (Integer & a);
14 friend int operator ! ( const Integer & a);
15 friend const Integer & operator ++ (Integer & a);
16 friend const Integer operator ++ (Integer & a, int );
17 friend const Integer & operator -- (Integer & a);
18 friend const Integer operator -- (Integer & a, int );
19 };
20
21 const Integer & operator + ( const Integer & a)
22 {
23 cout << " +Integer\n " ;
24 return a;
25 }
26
27 const Integer operator - ( const Integer & a)
28 {
29 cout << " -Integer\n " ;
30 return Integer( - a.i);
31 }
32
33 const Integer operator ~ ( const Integer & a)
34 {
35 cout << " ~Integer\n " ;
36 return Integer( ~ a.i);
37 }
38
39 Integer * operator & (Integer & a)
40 {
41 cout << " &Integer\n " ;
42 return a.This();
43 }
44
45 int operator ! ( const Integer & a)
46 {
47 cout << " !Integer\n " ;
48 return ! a.i;
49 }
50
51 const Integer & operator ++ (Integer & a)
52 {
53 cout << " ++Integer\n " ;
54 a.i ++ ;
55 return a;
56 }
57
58 const Integer operator ++ (Integer & a, int )
59 {
60 cout << " Integer++\n " ;
61 Integer before(a.i);
62 a.i ++ ;
63 return before;
64 }
65
66 const Integer & operator -- (Integer & a)
67 {
68 cout << " --Integer\n " ;
69 a.i -- ;
70 return a;
71 }
72
73 const Integer operator -- (Integer & a, int )
74 {
75 cout << " Integer--\n " ;
76 Integer before(a.i);
77 a.i -- ;
78 return before;
79 }
80
81 void f(Integer a)
82 {
83 + a;
84 - a;
85 ~ a;
86 Integer * ip = & a;
87 ! a;
88 ++ a;
89 a ++ ;
90 -- a;
91 a -- ;
92 }
93
94 class Byte
95 {
96 unsigned char b;
97 public :
98 Byte(unsigned char bb = 0 ) : b(bb) {}
99 const Byte & operator + () const
100 {
101 cout << " +Byte\n " ;
102 return * this ;
103 }
104
105 const Byte operator - () const
106 {
107 cout << " -Byte\n " ;
108 return Byte( - b);
109 }
110
111 const Byte operator ~ () const
112 {
113 cout << " ~Byte\n " ;
114 return Byte( ~ b);
115 }
116
117 Byte operator ! () const
118 {
119 cout << " !Byte\n " ;
120 return Byte( ! b);
121 }
122
123 Byte * operator & ()
124 {
125 cout << " &Byte\n " ;
126 return this ;
127 }
128
129 const Byte & operator ++ ()
130 {
131 cout << " ++Byte\n " ;
132 b ++ ;
133 return * this ;
134 }
135
136 const Byte operator ++ ( int )
137 {
138 cout << " Byte++\n " ;
139 Byte before(b);
140 b ++ ;
141 return before;
142 }
143
144 const Byte & operator -- ()
145 {
146 cout << " --Byte\n " ;
147 -- b;
148 return * this ;
149 }
150
151 const Byte operator -- ( int )
152 {
153 cout << " Byte--\n " ;
154 Byte before(b);
155 -- b;
156 return before;
157 }
158 };
159
160 void g(Byte b)
161 {
162 + b;
163 - b;
164 ~ b;
165 Byte * bp = & b;
166 ! b;
167 ++ b;
168 b ++ ;
169 -- b;
170 b -- ;
171 }
172
173 int main()
174 {
175 Integer a;
176 f(a);
177 Byte b;
178 g(b);
179 }