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

ExpandedBlockStart.gif 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  }

 

转载于:https://www.cnblogs.com/zhtf2014/archive/2010/11/26/1889269.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值