运算符重载疑难知识点总结

大一下学期疑难知识总结目录:点击打开链接

1.

不能重载的运算符只有六个,分别是成员访问运算符“.”、成员指针运算符“*”和“->”、作用域运算符“∷”、sizeof运算符和三目运算符“?:”。

2.

运算符重载的规则

只能重载C++预定义中已有的运算符,不可自己“创造”新的运算符进行重载。

重载功能应当与原有功能相类似。

不能改变运算符的操作数的个数;

 不能改变运算符原有的优先级;

 不能改变原有的结合性;

 不能改变运算符对预定义类型数据的操作方式,即至少要有一个操作对象是自定义类型,这样做的目的是防止用户修改基本类型数据的运算性质。

3.

A operator +(A &a)      //成员函数重载运算符+

       {      A  t;     t.i=i+a.i; return t;  }

a3=a1+a2; 相当于a3=a1.operator+(a2)

Test operator +(Test &t1, Test&t2) //友元函数重载运算符+

{  Test t3;

    t3.a=t1.a+t2.a;

    return t3;

}

4.

成员函数重载++(前后缀) 

class Time

{public:

       Time(){minute=0;sec=0;}

       Time(intm,int s):minute(m),sec(s){ }

       Time operator++( );    //声明前置自增运算符“++”重载函数

       Time operator++(int);   //声明后置自增运算符“++”重载函数

         void display(){cout<<minute<<“minute”<<sec<<“sec”<<endl;}

private:

       intminute;

       intsec;

};

Time Time∷operator++( )    //定义前置自增运算符“++”重载函数

{       sec++;

       if(sec>=60)

       {     

              sec=0;         //满60秒进1分钟

              ++minute;

       }

       return *this;         //返回当前对象值

}

Time Time∷operator++(int)  //定义后置自增运算符“++”重载函数

{

       Time temp(*this);

       sec++;

       if(sec>=60)

       {

              sec=0;

              ++minute;

       }

       return temp;         //返回的是自加前的对象

}

b)     如何用成员函数重置单目运算符

friend void operator ++(Point &point)//重载前缀++

{++point.x;   ++point.y;}

 

friend Point operator ++(Point&point,int a) //重载后缀++

{     

Point p(1,1); //创建任意一个对象

    p=point;

       ++point.x;   

       ++point.y;

       returnp;

}

 

5

c=a+b;      实际上是 c=a.operator+(b);

c=++a;      实际上是 c=operator++(a);

c+=a;       实际上是 c.operator+=(a );   

6.

有些运算符不能用友元函数进行重载,它们是:=,(),[ ],->等。

7.

成员函数

AB operator+(int x)

{      ABtemp;

       temp.a=a+x;

       temp.b=b+x;

       returntemp;

}

ob2=ob1+20;

//ob2=30+ob1;这种情况下,系统预定义的数据类型不能出现在运算符的左边

友元函数

friend AB operator+(AB ob,int x);
friend AB operator+(int x,AB ob);
AB operator +(AB ob,int x){
	AB temp;
	temp.a=ob.a+x;	temp.b=ob.b+x;	return temp;}
AB operator +(int x, AB ob){
   AB temp;
  temp.a=ob.a+x;	temp.b=ob.b+x;	return temp;}

 7.输入输出不能被重载为成员函数!!!

猜你喜欢

转载自blog.csdn.net/sdz20172133/article/details/80905565
今日推荐