c++运算符重载

#pragma once
  2 #include <iostream>
  3 using namespace std;
  4 class INT;
  5 ostream &operator<<(ostream &out,const INT &a);
  6 INT & operator>>(istream &in,const INT &a);
  7 INT operator - (const INT &a,const INT &b);
  8 class INT
  9 {
 10 public:
 11     INT(int X=0):x(X)
 12     {
 13     }
 14 //双目运算符重载//
INT  operator + (const INT & a);
 16  INT  operator * (const INT & a);
 17  INT  operator / (const INT & a);
 18  INT  operator % (const INT & a);
 19  INT  operator &&(const INT & a);
 20  INT  operator ||(const INT & a);
 21  INT  operator ==(const INT & a);
 22  INT  operator !=(const INT & a);
 23  INT  operator <<(const INT & a);
 24  INT  operator >>(const INT & a);
 25  INT  operator  <(const INT & a);
 26  INT  operator  >(const INT & a);
 27  INT  operator >=(const INT & a);
 28  INT  operator <=(const INT & a);
 29  INT  operator & (const INT & a);
 30  INT  operator | (const INT & a);
 31  INT  operator +=(const INT & a);
 32  INT  operator = (const INT & a);
 33  INT  operator -=(const INT & a);
 34  INT  operator /=(const INT & a);
 35  INT  operator *=(const INT & a);
 36  INT  operator %=(const INT & a);
 37  INT  operator ^ (const INT & a);//按位异或。
//单目运算符
 39  INT  operator ++(int);
 40  INT  operator ++();
 41  INT  operator !();
 42  INT  operator ~();
 43  INT  operator &();//这里没有地址,所以产生的是随机值。
 44  INT  operator ()(const INT & a);
 45 friend INT operator - (const INT &a,const INT & b);
 46 //输出输入流//
 47 friend ostream & operator <<(ostream &out,const INT &a );
 48 friend INT & operator >>(istream &in, INT &a);
 49 private:
 50     int x;
 51 };
 52 INT INT :: operator ()(const INT & a)
 53 {
 54   return INT(a.x);
 55 }
INT INT :: operator & ()
 57 {
 58   return INT((int)&x);
 59 }
 60 INT INT :: operator ~ ()
 61 {
 62   return INT(~x);
 63 }
 64 INT INT :: operator ! ()
 65 {
 66   return (!x);
 67 }
 68 INT INT :: operator ++()
 69 {
 70   x++;
 71   return INT(x);
 72 }
 73 INT INT :: operator ++(int)
 74 {
 75    INT a(x);
 76    x++;
 77    return a;
 78 }
 INT INT ::operator =  (const INT & a)
 80 {
 81   return INT(x=a.x);
 82 }
 83 INT INT ::operator ^  (const INT & a)
 84 {
 85   return INT(x^a.x);
 86 }
 87 INT INT ::operator %= (const INT & a)
 88 {
 89   return INT(x%=(a.x));
 90 }
 91 INT INT ::operator *= (const INT & a)
 92 {
 93   return INT(x*=(a.x));
 94 }
 95 INT INT ::operator /= (const INT & a)
 96 {
 97   return INT(x/=(a.x));
 }
 99 INT INT ::operator -= (const INT & a)
100 {
101   return INT(x-=a.x);
102 }
103 INT INT ::operator += (const INT & a)
104 {
105   return INT(x+=a.x);
106 }
107 INT INT ::operator |  (const INT & a)
108 {
109   return INT(x | a.x);
110 }
111 INT INT ::operator &  (const INT & a)
112 {
113   return INT( x & (a.x) );
114 }
115 INT INT ::operator <= (const INT & a)
116 {
117   return INT(x<=a.x);
118 }
 INT INT ::operator >= (const INT & a)
120 {
121     return INT(x>=a.x);
122 }
123 INT INT :: operator > (const INT & a)
124 {
125   return INT(x>a.x);
126 }
127 INT INT :: operator < (const INT & a)
128 {
129   return INT(x<a.x);
130 }
131 INT INT :: operator >> (const INT &a )
132 {
133   return INT( (x>>a.x) );
134 }
135 INT INT :: operator << (const INT & a)
136 {
137   return INT((x<<a.x));
138 }
139 INT INT :: operator != (const INT & a)
140 {
141     return INT(x != a.x);
142 }
INT INT :: operator == (const INT & a)
144 {
145   return INT(x == a.x);
146 }
147 INT INT :: operator || (const INT & a)
148 {
149     return INT( x || (a.x) );
150 }
151 INT INT :: operator && (const INT & a)
152 {
153     return INT(x&&(a.x));
154 }
155 INT INT :: operator % (const INT & a)
156 {
157   return INT(x%(a.x));
158 }
159 INT INT ::  operator / (const INT & a)
160 {
161     return INT(x/(a.x));
162 }
163 INT INT::operator *(const INT &a)
164 {
165     return INT(x*(a.x));
166 }
INT & operator >> (istream &in, INT &a)
168 {
169  in >> (a.x);
170  return a;
171 }
172 INT operator - (const INT &a,const INT & b )
173 {
174    return INT(a.x-b.x);
175 }
176 INT  INT::operator + (const INT &a)
177 {
178   return INT(x+a.x);
179 }
180 ostream & operator <<(ostream &out,const INT &a )
181 {
182   out<<a.x<<endl;
183 }
184 
185 int get_sum(char ch)
186 {
187   if( (ch-'0')>=0 && (ch-'0')<=9 )
188       return 1;
189   else
190       return 0;
}
192 INT coverment(int x,char c,int y)
193 {
194   switch(c)
195     {
196     case '+':return INT(x+y); break;
197     case '-':return INT(x-y); break;
198     case '*':return INT(x*y); break;
199     case '/':return INT(x/y); break;
200     case '%':return INT(x%y); break;
201     case '&':return INT(x&y); break;
202     case '|':return INT(x|y); break;
203     case '<':return INT(x<y); break;
204     case '>':return INT(x>y); break;
205     case '=':return INT(x=y); break;
206     case '^':return INT(x^y); break;
207     }
208 }
209 INT CoverMent(int x,char c,char c1,int y)
210 {
211     switch(c)
  {
213         case '&':return INT(x&&y); break;
214         case '|':return INT(x||y); break;
215         case '!':return INT(x!=y); break;
216         case '<':
217           switch(c1)
218         {
219             case '<': return INT(x<<y); break;
220             case '=': return INT(x<=y); break;
221         };
222         break;
223       case '>':
224           switch(c1)
225         {
226           case '>':return INT(x>>y); break;
227           case '=':return INT(x>=y); break;
228         };
229           break;
 case '+':return INT(x+=y); break;
231         case '-':return INT(x-=y); break;
232         case '*':return INT(x*=y); break;
233         case '/':return INT(x/=y); break;
234         case '%':return INT(x%=y); break;
235       }
236 }
237 INT COVERMENT(char c,int x)
238 {
239   switch(c)
240     {
241       case '&':return INT((int)&x); break;
242       case '!':return INT(!x); break;
243       case '~':return INT(~x); break;
244     }
245 }
246 
                                             

以上是INT.h文件,下面是INT.cpp文件

 #include <iostream>
  2 //#include <ctype.h>
  3 #include "INT.h"
  4 int main()
  5  {
  6   char *s1 = new char [20];
  7 //  cin>>s1;这里出现了一个错误,就是cin 读取输入的时候是以>    空格为一次读取标记号
  8   std::cout<<"please input :"<<std::endl;
  9   cin.getline(s1,20);
 10   int a=0;
 11   int b=0;
 12   char ch1;
 13   char ch2;
 14   while(*s1 == ' ')
 15   {
 16   s1++;
 17   }
 18   if( get_sum(*s1) )
 19      {
 20       while( get_sum(*s1) )
 21          {
 22           a=a*10+(*s1-'0');
 23           s1++;
 }
 25        while(*s1 == ' ')
 26           {
 27           s1++;
 28           }
 29         ch1 = *s1;
 30         s1++;
 31         while(*s1 == ' ')
 32           {
 33           s1++;
 34           }
 35       if( !get_sum(*s1) )
 36          {
 37           ch2 = *s1;
 38           s1++;
 39           while(*s1 != '\0')
 40            {
 41             b=b*10+(*s1-'0');
 42             s1++;
 43            }
 44           INT d=CoverMent(a,ch1,ch2,b);
 45           std::cout<<"result is :";
          cout<<d<<endl;
 47          }
 48     else
 49        {
 50         while( *s1!= '\0' )
 51         {
 52         b=b*10+(*s1-'0');
 53         s1++;
 54         }
 55        INT d=coverment(a,ch1,b);
 56         std::cout<<"result is : ";
 57         cout<<d<<endl;
 58       }
 59   }
 60   else
 61  {
 62     ch1 = *s1;
 63     s1++;
 64     while(*s1 != '\0')
 65     {
 66         a = a*10 + (*s1-'0');
 67         s1++;
 68     }
 69     INT d = COVERMENT(ch1,a);
 cout<<d<<endl;
 71   }
 72 return 0;
 73  }
做这个的时候遇到了一个问题就是,开始我用cin作为输入字符串的时候,比如说:3    +    2中间有很多空格,就达不到我的预期结果,后来我发现我遗忘了一个知识点就是cin的读取是以空格为结束标记的,所以我选择用cin.getline()来读取一行,'\n'被读取,且自动补全'\0:',而cin.get()则将'\n'留在了输入队列,如果再使用c.get()时会只读一个'\n'而导致结果不正确。

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值