• 第十章 运算符重载


    第十章 运算符重载

    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 类型名()

    {函数体;}

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

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

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

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

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

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

    个人分享,欢迎指导,未经允许,请勿转载。谢谢!
  • 相关阅读:
    前插法创建带头节点的单链表
    利用Oracle数据库发送邮件
    关于如何给C#中的ListBox控件添加双击事件
    类似QQ表情的功能,包括动态绑定图片
    ASP.NET 缓存技术总结
    VS2008 快捷键大全
    Oracle 中union的用法
    C#找到Excel中的所有Sheetname的方法
    推荐一个学习XPath的网站
    Oracle游标使用大全
  • 原文地址:https://www.cnblogs.com/hello-OK/p/7056293.html
Copyright © 2020-2023  润新知