您的位置:首页 > 编程语言 > C语言/C++

【笔记-C++】 运算符重载

2017-12-17 18:08 197 查看
运算符重载(一种特殊的函数)

双目运算符重载:

对象1   运算符  对象2

类内重载:

 void  operator+(对象2){.......}

void为返回值类型,可任意

+为要重载的运算符,相当于函数名

在类内重载可以少写第一个参数,因为类内有this指针(this指针指向当前对象1)

对象1必须是类,对象2类型任意

 

全局区重载:

void  operator+(对象1,对象2){...........}

 

运算符重载后,即可用运算符对类进行运算,一般重载尽量定义在类内

 

输入输出重载只能在类外,不能打开输入输出类

istream&   operator>>(istream&is,  A &a){

       return is>>a.x或者return  cin>>a.x

}

is等价于cin,可任意名

A &a   不能加const,输入是做改变,&a引用a,因为相当于在函数中改变外部的值

istream& 返回输入流,即返回的值后面可以用流的语法。

ostream& operator<<(ostream& os, const  A  &a){..........}

单目运算符重载

运算符  对象1      -, !, ~, ++, --

与双目运算符重载类似,只是少了一个对象2

++,--重载时默认为前++、--:

类内定义:  void  operator++(){.............}

     使用哑元int可变为后++、--

            void  operator++(int){............}

 

‘()’运算符重载

1)可以有多个参数
   类内定义: int  operator()(A  a1,  A  a2){

                 return a1*x+a2*x;

              }

2)重载为强制类型转换
   不写返回值类型
   类内定义: operator  int() {return i;}

 

使用时:  (int)a   a为对象

特殊重载

有些运算符只能重载为类内的成员形式:

=, []

“=”重载时注意自赋值:

if(this==&a)  return *this;

 

可以重载new,delete,重载时至少有一个类类型

void*  operator  new(size_t  t){............}

void   operator  delete(void *p){...........}

*,->希望按照指针方式操作

*返回对象,->返回地址

A&  operator*(){return *p;}

A*   operator->(){return p;}      迭代器用

   注意:(*p).m     “.”优先级高

不能进行的重载

不能对基本类型数据进行重载

不能发明新的运算符

 

不能被重载的运算符:

::

.

sizeof

.*   到成员的指针

?  :  三目运算符

typeid        类型识别
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  c++