美文网首页
第十二章 运算符重载

第十二章 运算符重载

作者: 意不适 | 来源:发表于2017-03-23 17:00 被阅读0次

    简介:operator overloading只是一种syntactic sugar,即它只是另一种函数调用的方式。

    运算符重载就是对现有的运算符重新进行定义,赋予其另一种功能,以适应不同的数据类型。

    12.1 两个极端

    只有那些包含用户自定义类型的表达式才能有重载的运算符。

    12.2 语法

    定义重载的运算符就像定义函数,只是该运算符函数的函数名是operator@

    返回类型   operator运算符号(形参列表)
    {
           函数体
    }

    函数参数表中参数的个数取决于两个因素:

    1. 运算符是一元的还是二元的
    2. 运算符被定义为全局函数还是成员函数

    12.3 可重载的运算符

    运算符重载是相当受限制的:
    1. 不能使用C中当前没有意义的运算符
    2. 不能改变运算符的优先级
    3. 不能改变运算符的参数个数

    注意:  .     .*    ::    ?:    sizeof 不能重载

    (1)运算符重载为类的成员函数

    class 类名{
        ……
        返回类型  operator运算符号(形参列表)
        {
           函数体

        }
        ……
    }

    或者

    class 类名
    {
        ……
        返回类型  operator运算符号(形参列表);
        ……
    }

    返回类型  类名::operator运算符号(形参列表)
    {
    函数体
    }

    当运算符重载为成员函数时,运算符函数的形参个数比运算符规定的运算对象个数要少一个。
    原因:类的非静态成员函数都有一个隐含的this指针,运算符函数可以用this指针隐式访问类对象的成员,不需要放进形参列表进行传递。少了的运算对象就是该对象本身。

    (2)运算符重载为类的友元

    class 类名
    {
        ……
        //友元声明
        friend 返回类型  operator运算符号(形参列表);
        ……
    }

    返回类型  operator运算符号(形参列表)
    {
    函数体
    }

    当运算符重载为成员函数时,运算符函数的形参个数比运算符规定的运算对象个数一致。

    operator=只允许作为成员函数

    返回值优化

    12.6 自动类型转换

    关键字explicit(只能用于构造函数)可以用来阻止构造函数转换

    相关文章

      网友评论

          本文标题:第十二章 运算符重载

          本文链接:https://www.haomeiwen.com/subject/lggwnttx.html