Thingking in c++第二版

源代码在线查看: integer.cpp

软件大小: 16430 K
上传用户: zhhw254774338
关键词: Thingking in
下载地址: 免注册下载 普通下载 VIP

相关代码

				//: C12:Integer.cpp {O}
				// From Thinking in C++, 2nd Edition
				// Available at http://www.BruceEckel.com
				// (c) Bruce Eckel 2000
				// Copyright notice in Copyright.txt
				// Implementation of overloaded operators
				#include "Integer.h"
				#include "../require.h"
				
				const Integer
				  operator+(const Integer& left,
				            const Integer& right) {
				  return Integer(left.i + right.i);
				}
				const Integer
				  operator-(const Integer& left,
				            const Integer& right) {
				  return Integer(left.i - right.i);
				}
				const Integer
				  operator*(const Integer& left,
				            const Integer& right) {
				  return Integer(left.i * right.i);
				}
				const Integer
				  operator/(const Integer& left,
				            const Integer& right) {
				  require(right.i != 0, "divide by zero");
				  return Integer(left.i / right.i);
				}
				const Integer
				  operator%(const Integer& left,
				            const Integer& right) {
				  require(right.i != 0, "modulo by zero");
				  return Integer(left.i % right.i);
				}
				const Integer
				  operator^(const Integer& left,
				            const Integer& right) {
				  return Integer(left.i ^ right.i);
				}
				const Integer
				  operator&(const Integer& left,
				            const Integer& right) {
				  return Integer(left.i & right.i);
				}
				const Integer
				  operator|(const Integer& left,
				            const Integer& right) {
				  return Integer(left.i | right.i);
				}
				const Integer
				  operator				             const Integer& right) {
				  return Integer(left.i 				}
				const Integer
				  operator>>(const Integer& left,
				             const Integer& right) {
				  return Integer(left.i >> right.i);
				}
				// Assignments modify & return lvalue:
				Integer& operator+=(Integer& left,
				                    const Integer& right) {
				   if(&left == &right) {/* self-assignment */}
				   left.i += right.i;
				   return left;
				}
				Integer& operator-=(Integer& left,
				                    const Integer& right) {
				   if(&left == &right) {/* self-assignment */}
				   left.i -= right.i;
				   return left;
				}
				Integer& operator*=(Integer& left,
				                    const Integer& right) {
				   if(&left == &right) {/* self-assignment */}
				   left.i *= right.i;
				   return left;
				}
				Integer& operator/=(Integer& left,
				                    const Integer& right) {
				   require(right.i != 0, "divide by zero");
				   if(&left == &right) {/* self-assignment */}
				   left.i /= right.i;
				   return left;
				}
				Integer& operator%=(Integer& left,
				                    const Integer& right) {
				   require(right.i != 0, "modulo by zero");
				   if(&left == &right) {/* self-assignment */}
				   left.i %= right.i;
				   return left;
				}
				Integer& operator^=(Integer& left,
				                    const Integer& right) {
				   if(&left == &right) {/* self-assignment */}
				   left.i ^= right.i;
				   return left;
				}
				Integer& operator&=(Integer& left,
				                    const Integer& right) {
				   if(&left == &right) {/* self-assignment */}
				   left.i &= right.i;
				   return left;
				}
				Integer& operator|=(Integer& left,
				                    const Integer& right) {
				   if(&left == &right) {/* self-assignment */}
				   left.i |= right.i;
				   return left;
				}
				Integer& operator>>=(Integer& left,
				                     const Integer& right) {
				   if(&left == &right) {/* self-assignment */}
				   left.i >>= right.i;
				   return left;
				}
				Integer& operator				                     const Integer& right) {
				   if(&left == &right) {/* self-assignment */}
				   left.i 				   return left;
				}
				// Conditional operators return true/false:
				int operator==(const Integer& left,
				               const Integer& right) {
				    return left.i == right.i;
				}
				int operator!=(const Integer& left,
				               const Integer& right) {
				    return left.i != right.i;
				}
				int operator				              const Integer& right) {
				    return left.i < right.i;
				}
				int operator>(const Integer& left,
				              const Integer& right) {
				    return left.i > right.i;
				}
				int operator				               const Integer& right) {
				    return left.i 				}
				int operator>=(const Integer& left,
				               const Integer& right) {
				    return left.i >= right.i;
				}
				int operator&&(const Integer& left,
				               const Integer& right) {
				    return left.i && right.i;
				}
				int operator||(const Integer& left,
				               const Integer& right) {
				    return left.i || right.i;
				} ///:~
							

相关资源