标签:友元函数 opera cas 结构 ++ enum 类对象 总结 使用
为什么要对运算符进行重载:
C++预定义中的运算符的操作对象只局限于基本的内置数据类型,但是对于我们自定义的类型(类)是没有办法操作的。但是大多时候我们需要对我们定义的类型进行类似的运算,这个时候就需要我们对这么运算符进行重新定义,赋予其新的功能,以满足自身的需求。
在进行对象之间的运算时,程序会调用与运算符相对应的函数进行处理,所以运算符重载有两种方式:成员函数和友元函数。成员函数的形式比较简单,就是在类里面定义了一个与操作符相关的函数。友元函数因为没有this指针,所以形参会多一个。
1 class A 2 { 3 public: 4 A(int d):data(d){} 5 A operator+(A&); //成员函数 6 A operator-(A&); 7 8 friend A operator/(A&,A&); //友元函数 9 friend A operator%(A&,A&); 10 private: 11 int data; 12 }; 13 //成员函数的形式 14 A A::operator+(A &a) 15 { 16 return A(data+a.data); 17 } 18 A A::operator-(A &a) 19 { 20 return A(data-a.data); 21 } 22 23 //友元函数的形式 24 A operator/(A &a1,A &a2) 25 { 26 return A(a1.data/a2.data); 27 } 28 A operator%(A &a1,A &a2) 29 { 30 return A(a1.data%a2.data); 31 } 32 //然后我们就可以对类的对象进行+、-、*、/了。 33 void main(void) 34 { 35 A a1(1),a2(2),a3(3); 36 a1=a2+a3; 37 //或者 38 a1=a2.operator+(a3); 39 }
关系运算符有==,!=,<,>,<=,>=。
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&);//输入流
两种重载方式的比较:
注意事项:
参考资料:
https://wuyuans.com/2012/09/cpp-operator-overload
标签:友元函数 opera cas 结构 ++ enum 类对象 总结 使用
原文地址:http://www.cnblogs.com/dk666/p/7133078.html