Ray's playground

 

Operator Overloading part 1(Chapter 12 of Thinking in C++)

Integer
  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 }

 

posted on 2010-11-26 22:15  Ray Z  阅读(211)  评论(0编辑  收藏  举报

导航