標籤:運算子多載 類 友元函數
C++實現運算子多載
#include <iostream>using namespace std;//#define SHOWclass Int{ friend bool operator>(const Int& x,const Int& y); //friend int operator>(const Int& x,const Int& y); friend bool operator<(const Int& x,const Int& y); friend bool operator==(const Int& x,const Int& y); friend Int operator<<(const Int& x,const Int& y); friend Int operator>>(const Int& x,const Int& y); friend Int& operator+=(Int& x,const Int& y); friend Int& operator-=(Int& x,const Int& y); friend Int& operator*=(Int& x,const Int& y); friend Int& operator/=(Int& x,const Int& y); friend ostream& operator<<(ostream& out,const Int& x); //重載流插入運算子<< friend istream& operator>>(istream& input,const Int& x);//重載流提取運算子>>public: Int(int x=0):i(x) { #ifdef SHOW cout<<"Creat Int Obj : "<<this<<endl; #endif // SHOW } Int(const Int& x) { #ifdef SHOW cout<<"Copy Int Obj : "<<this<<endl; #endif // SHOW } Int& operator=(const Int& x) { #ifdef SHOW cout<<"Assign,"<<this<<" : "<<&x<<endl; #endif // SHOW if(this != &x) { i = x.i; } return *this; } ~Int() { #ifdef SHOW cout<<"Free Int Obj : "<<this<<endl; #endif // SHOW } const Int operator+(const Int& x); const Int operator-(const Int& x); const Int operator*(const Int& x); const Int operator/(const Int& x); const Int operator%(const Int& x); const Int operator&(const Int& x); const Int operator|(const Int& x); const Int operator^(const Int& x); const Int operator~(); const Int operator!(); const Int operator++(); //前置++運算子 const Int operator++(int);//後置++運算子 const Int operator--(); //前置--運算子 const Int operator--(int);//後置--運算子 const Int operator+=(const Int& x); const Int operator-=(const Int& x);private: int i;};ostream& operator<<(ostream& out,const Int& x){ out<<x.i; return out;}istream& operator>>(istream& input,const Int& x){ input>>x.i; return input;}bool operator>(const Int& x,const Int& y){ if(x.i>y.i) { return true; } else { return false; }}int operator>(const Int& x ,const Int& y){ return x.i>y.i;}bool operator<(const Int& x,const Int& y){ if(x.i<y.i) { return true; } else { return false; }}bool operator==(const Int& x,const Int& y){ if(x.i==y.i) { return true; } else { return false; }}Int operator<<(const Int& x,const Int& y){ return (x.i<<y.i);}Int operator>>(const Int& x,const Int& y){ return (x.i>>y.i);}Int& operator+=(Int& x,const Int& y){ x.i += y.i; return x;}Int& operator-=(Int& x,const Int& y){ x.i -= y.i; return x;}Int& operator*=(Int& x,const Int& y){ x.i *= y.i; return x;}Int& operator/=(Int& x,const Int& y){ x.i /= y.i; return x;}const Int Int::operator+(const Int& x){ return (i+x.i);}const Int Int::operator-(const Int& x){ return (i-x.i);}const Int Int::operator*(const Int& x){ return (i*x.i);}const Int Int::operator/(const Int& x){ return (i/x.i);}const Int Int::operator%(const Int& x){ return (i%x.i);}const Int Int::operator&(const Int& x){ return (i&x.i);}const Int Int::operator|(const Int& x){ return (i|x.i);}const Int Int::operator^(const Int& x){ return (i^x.i);}const Int Int::operator~(){ return ~i;}const Int Int::operator!(){ return !i;}const Int Int::operator++(){ ++ i; return *this;}const Int Int::operator++(int){ Int tmp(*this); i ++; return tmp;}const Int Int::operator--(){ -- i; return *this;}const Int Int::operator--(int){ Int tmp(*this); i --; return tmp;}int main(){ Int t(10),t1(9),t2(3); t = t1 + t2; cout<<t<<endl; t = t1 - t2; cout<<t<<endl; t = t1 * t2; cout<<t<<endl; t = t1 / t2; cout<<t<<endl; t = t1 % t2; cout<<t<<endl; ++ t; cout<<t<<endl; t ++; cout<<t<<endl; -- t; cout<<t<<endl; t --; cout<<t<<endl; t = t1>t2; cout<<t<<endl; t = t1<t2; cout<<t<<endl; t = t1==t2; cout<<t<<endl; t = t1&t2; cout<<t<<endl; t = t1|t2; cout<<t<<endl; t = t1^t2; cout<<t<<endl; t = ~t1; cout<<t<<endl; t= !t1; cout<<t<<endl; t = t1<<t2; cout<<t<<endl; t = t1>>t2; cout<<t<<endl; t += t1; cout<<t<<endl; t -= t1; cout<<t<<endl; t *= t1; cout<<t<<endl; t /= t1; cout<<t<<endl; return 0;}
C++ 運算子多載