c++的一大特性就是重载(overload),通过重载可以把功能相似的几个函数合为一个,使得程序更加简洁、高效。在c++中不止函数可以重载,运算符也可以重载。由于一般数据类型间的运算符没有重载的必要,所以运算符重载主要是面向对象之间的。
class A{public: A(int d):data(d){} A operator+(A&);//成员函数 A operator-(A&); A operator*(A&); A operator/(A&); A operator%(A&); friend A operator+(A&,A&);//友元函数 friend A operator-(A&,A&); friend A operator*(A&,A&); friend A operator/(A&,A&); friend A operator%(A&,A&);private: int data;};//成员函数的形式A A::operator+(A &a){ return A(data+a.data);}A A::operator-(A &a){ return A(data-a.data);}A A::operator*(A &a){ return A(data*a.data);}A A::operator/(A &a){ return A(data/a.data);}A A::operator%(A &a){ return A(data%a.data);}//友元函数的形式A operator+(A &a1,A &a2){ return A(a1.data+a2.data);}A operator-(A &a1,A &a2){ return A(a1.data-a2.data);}A operator*(A &a1,A &a2){ return A(a1.data*a2.data);}A operator/(A &a1,A &a2){ return A(a1.data/a2.data);}A operator%(A &a1,A &a2){ return A(a1.data%a2.data);}//然后我们就可以对类的对象进行+、-、*、/了。void main(void){ A a1(1),a2(2),a3(3); a1=a2+a3; //或者 a1=a2.operator+(a3);}
注意:在进行a2+a3的时候会出错,因为我们在上面对+定义了两种方法,去掉一种即可。
bool operator == (const A& ); bool operator != (const A& );bool operator < (const A& );bool operator <= (const A& );bool operator > (const A& );bool operator >= (const A& );
bool operator || (const A& );bool operator && (const A& );bool operator ! ();
A& operator + ();A& operator - ();A* operator & ();A& operator * ();
A& operator ++ ();//前置++A operator ++ (int);//后置++A& operator --();//前置--A operator -- (int);//后置--
A operator | (const A& );A operator & (const A& );A operator ^ (const A& );A operator << (int i);A operator >> (int i);A operator ~ ();
A& operator += (const A& );A& operator -= (const A& ); A& operator *= (const A& );A& operator /= (const A& );A& operator %= (const A& );A& operator &= (const A& );A& operator |= (const A& );A& operator ^= (const A& );A& operator <<= (int i);A& operator >>= (int i);
void *operator new(size_t size);void *operator new(size_t size, int i);void *operator new[](size_t size);void operator delete(void*p);void operator delete(void*p, int i, int j);void operator delete [](void* p);
A& operator = (const A& );char operator [] (int i);//返回值不能作为左值const char* operator () ();T operator -> ();//类型转换符operator char* () const;operator int ();operator const char () const;operator short int () const;operator long long () const;//还有很多就不写了
而这些只能以友元函数的形式重载
friend inline ostream &operator << (ostream&, A&);//输出流friend inline istream &operator >> (istream&, A&);//输入流