操作符重载的基本规则

1.操作符重载实际上就是函数重载

在C++中

不能被重载的符号有:

            a.            .     
            b.           .*
            c.           ?:
            d.           ::
       e.           sizeof

符号:
    =  ()   []   ->   都只能在类的内部进行重写
    >>   <<           只能在类外进行重写,然后以友元的方式

在类的成员方式重写的符号:
    如果是一元符号,那么就不需要参数,用this指针代替
    如果是二元符号,就只需要一个参数,另外一个由this指针代替
以友元方式:
    如果是一元符号时,重载时必须有一个参数
    如果是二元符号时,重载时必须有两个参数
    >>  和  <<   都只能使用友元方式进行重载       

各种符号的重写一般规则:
    符号                                                                                         方式
    a.     ()                                                                               返回类型  operator()(  参数  )
    b.     >                                                                               bool   operator >(参数)
    c.     <                                                                               bool   operator<(参数)
         d.     ==                                                                        bool   operator==(参数)
         e.     >>                                                                        istream& operator>>(参数)     (只能通过友元)
         f.      <<                                                                        ostream& operator<<(参数)   (只能通过友元)
    g.     char *                                                                      operator char *(){return 指针}
            int                                                                             operator int()    {return  数值}
    h.    前置++                                                                     返回类型  operator++()
                                                                                            {
                                                                                                 this->data++;
                                                                                                  return *this;            
                                                                                                }                                       
    i.  后置++                                                                     返回类型 operator++(T i)  //需要一个参数                                                                   {

                                                                                           {

                                                                                           返回类型  tmp;

                                                                                              tmp=*this;    
                                                                                             this->data++;
                                                                                            return tmp;                    
                                                                                               }
    j.  1.  new                                void *operator new(size_t size)
        2.  new                                void *operator new(size_t size,Exception)      //1,2只是返回错误不同
        3.  new                                void *operator new(size_t size,void *p)        //3,返回指定的地址        k.      new[]                                void *operator new[](size_t size)
    l.    delete                            void operator delete(void* addr)
    m.     delete[]                            void operator delete[](void *addr)                        

你可能感兴趣的:(操作符重载的基本规则)