第十章 运算符重载

Posted hello_OK

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了第十章 运算符重载相关的知识,希望对你有一定的参考价值。

第十章 运算符重载

1.运算符重载的方法

(实质:函数重载)

*一般格式:

函数类型名operator 运算符名称(参数表){函数体;}

2.运算符重载的规则

*不允许定义新的运算符

*允许重载的运算符

双目运算符

+(加法)  - (减法)  * (乘法) / (除法)   %(取模)

关系运算符

==(等于) != (不等)  <   >   <=   >=   

逻辑运算符

||(或)   && (与)  !(非)

单目运算符

+ (正)  -(负)   *(指针)   &(取址)

自增自减运算符

++     --

位运算符

!(按位或)&...与)~...取反)^...异或)<<...左移)>>(右移)

赋值运算符

=   +=    - =   *=   /=   ^=   <<=  >>=...

空间申请与释放

New    delete   new[]  delete[]

其他

()   ->   ->*   ,   []

*不允许重载的运算符:.   *  ::   sizeof  ?:

*不能改变操作对象的个数

*不能改变运算符的优先级

*不能改变运算符的结合性

*重载运算符的函数不能有默认参数

*重载的运算符必须与用户自定义类型使用

*用于类对象的运算符一般需要重载(=&可以不用)

3.运算符重载函数作为类成员函数和友元函数

运算符重载的两种形式:1成员函数2友元函数

*如果运算符重载函数作为成员函数,它可以通过this指针自由访问本类的数据成员,所以可以省略一个形参

*双目运算符重载为友元函数是,由于友元函数不是该类的成员函数,因此在函数的形参表中必须有两个参数,不能省略

约定:

*赋值运算符“=”、下标运算符“[ ]”、函数调用运算符“()”、成员运算符“->”必须作为成员函数重载

*流插入“>>”、流提取运算符“<<”、类型转换运算符函数不能定义为类的成员函数,只能作为友元函数

*一般双目运算符重载为友元成员函数

4.双目运算符重载

5.单目运算符重载

自增自减运算符:

类名 operator ++();//前缀自增

类名 operator ++ int); //后缀自增

//这里int只当一个符号区别前缀和后缀

6.流插入运算符和流提取运算符重载

Friend istream& operator >>(istream & 自定义名, 类名 & 形参名);{

函数体;

Returned 自定义名;

Friend istream& operator <<(ostream & 自定义名, 类名 &形参名);{

函数体;

Returned 自定义名;

7.有关运算符重载

*确定要重的是哪一个运算符,向把它用于哪一个类

*了解头文件包含了那些运算符的重载

8.不同类型数据间的转换

*标准类型数据见的转换

隐式、显示:类型名(数据)   或者  (类型名)数据

*用转换构造函数进行不同类型数据的转换

(将一个其他类型的数据转换成一个类的对象)

转换构造函数只能有一个参数,如果有多个参数的话,就不是转换构造函数

类名(指定类型的数据)

类内转换构造函数: 类名(类型名& 对象){函数体;}

*类型转换函数(作用:将一个类的对象转换成另一类的数据)

一般形式:

Operator 类型名()

{函数体;}

·在函数名前不能指定函数类型,函数没有参数;

·类型转换函数只能作为成员函数,因为转换的主题是本类的对象。不能作为友元函数或者普通函数;

*在已经定义了相应的转换构造函数情况下, 将运送符“+”函数重载为友元函数,在进行两个类相加的时候,可以实现交换率

*如果运算符函数重载为成员函数,其的第一个参数必须是本类的对象。当第一个操作的对象不是类对象时,不能将运算符重载为成员函数。如果讲运算符“+”函数重载为类的成员函数,交换率不适用

约定:将双目运算符函数重载为友元函数。单目运算符重载为成员函数;

 

个人笔记,欢迎指教,未经允许,请勿转载。

以上是关于第十章 运算符重载的主要内容,如果未能解决你的问题,请参考以下文章

重载运算与类型转换)

C++从入门到入土第四篇:运算符重载

运算符重载

C++之重载运算与类型转换

C++类与对象第二篇:(构造函数析构函数拷贝构造运算符重载取地址及const取地址操作符重载)

Swift开发第六篇——操作运算符也可以重载& func 的参数修饰