重载运算符初学总结

一:重载运算符:

1重载运算符函数可以对运算符作出新的解释,但原有基本语义不变:

①:不改变运算符的优先级

②:不改变运算符的结合性

③:不改变运算符所需要的操作数

④:不能创建新的运算符

2:运算符函数可以重载为成员函数或友元函数。

3:成员运算符函数的原型在类的内部声明格式如下:

class X {

    //

返回类型 operator运算符(形参表);

  //

}

在类外定义成员运算符函数的格式如下:

返回类型 X::operator运算符(形参表)

{

     函数体

}

4: 一般而言,采用成员函数重载单目运算符时,以下两种方法是等价的:

    @aa;                      // 隐式调用

    aa.operator@();    // 显式调用

    成员运算符函数operator @所需的一个操作数由对象aa通过this指针隐含地传递。因此,在它的参数表中没有参数。

5:①:在第一个参数需要隐式转换的情形下,使用友元函数重载。

②:友元函数没有 this 指针,所需操作数都必须在参数表显式。

③:C++中不能用友元函数重载的运算符有

=    ()    []    ->

6:①:成员运算符函数比友元运算符函数少带一个参数(后置的++--需要增加一个形参)。

  ②:双目运算符一般可以被重载为友元运算符函数或成员运算符函数,但当操作数类型不相同时,必须使用友元函数。

7:①:赋值运算符重载用于对象数据的复制

②: operator= 必须重载为成员函数

③:重载函数原型为:

类名  &  类名  :: operator= ( 类名 ) ;

8[] () 只能用成员函数重载,不能用友元函数重载。

9:定义输出运算符“<<”重载函数的一般格式如下:

    ostream& operator<<(ostream& outclass_name& obj)

    {

          out<<obj.item1;

          out<<obj.item2;

          .. .

          out<<obj.itemn;

          return out;

    }

10 :定义输入运算符函数 “>>”重载函数的一般格式如下:

    istream& operator>>(istream& inclass_name& obj)

    {

            in>>obj.item1;

            in>>obj.item2;

            . . .

            in>>obj.itemn;

            return in;

    }

二:典型代码:

#include<iostream>

using namespace std;

class  Increase

{ public :

     Increase ( ) { value=0; }

     void  display( )  const { cout<<value<<'\n'; } ;

     friend Increase  operator ++ ( Increase & ) ;  // 前置

     friend Increase  operator ++ ( Increase &, int ) ;  // 后置

  private:   unsigned  value ;

};

Increase  operator ++ ( Increase & a )

  { a.value ++ ;   return a ; }

Increase  operator ++ ( Increase & a, int )

 { Increase  temp(a);   a.value ++ ;   return  temp; }

int main( )

  { Increase   a ,  b , n ;    int  i ;

     for ( i = 0 ; i < 10 ; i ++ )  a = n ++ ;

     cout <<"n= " ;  n.display( ) ;   cout <<"a= " ;   a.display( ) ;

     for ( i = 0 ; i < 10 ; i ++ )  b = ++ n ;

     cout << "n= " ;   n.display( ) ;   cout << "b= " ;   b.display( ) ;

 }

三:学习心得:

重载运算符和重载函数相似,遵循函数重载的基本原则。

重载之后的运算符不能改变运算符的优先级和结合性,也不能改变运算符操作数的个数及语法结构。
运算符重载不能改变该运算符用于内部类型对象的含义。它只能和用户自定义类型的对象一起使用,或者用于用户自定义类型的对象和内部类型的对象混合使用时。总之通过学习运算符重载能更好的运用函数,使代码更精炼。

猜你喜欢

转载自blog.csdn.net/sdau_20171819/article/details/80473735