0
点赞
收藏
分享

微信扫一扫

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


大一下学期疑难知识总结目录:​​

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;}


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

 

 

举报

相关推荐

0 条评论