zoukankan      html  css  js  c++  java
  • c++重载运算符

    C++中重载运算符

    注意事项:

    1. 重载运算符函数要求必须有一个参数为类对象.
    2. 重载运算符函数不可以有默认参实参.(operator() 除外)
    3. 重载运算符函数的参数个数与运算符作用的运算对象数量相同, 对于二元运算符来说,左侧运算符对象传递给第一个参数,右侧运算符对象传递给第二个参数.
    4. 重载之后的运算符本质上就是一个函数调用, 原生运算符的求值顺序以及运算符的短路属性并不会保留下来.

    C++中哪些运算符可以重载?

    大多数运算符都可以重载,有4个运算符不可以重载. 分别是: 作用域运行符::/成员访问运算符./成员访问指针运算符.*(c++primer第7339页)/三目运算符? : .

    哪些运算符应该作为类成员函数进行重载?

    1. 5个运算符必须作为类成员函数进行重载: 赋值运算符=/下标运算符[]/箭头运算符->/函数调用运算符(), 以及类型转换运算符.
    2. 改变对象状态的运算符以及与给定类型非常相关的运行符,建立写为类成员运算符. 例如: 复合赋值运算符/++--运算符/解引用运算符*等.
    3. 具有对称性的运算符通常为普通的非成员运算符, 例如: 关系/相等/算术运算符等.
    4. 输入输出运算符(>><< )必须是普通的非类成员函数,因为:如果是类成员函数的话,this指针绑定在第一个参数上了, 写法不符合常规了(例如: 类对象 << cout).

    重载运算符时,有哪些值得注意的事项?

    1. 算术运算符应该返回类型的值, 赋值运算符/复合赋值运算符应该返回左侧运算对象的引用,
    2. 如果一个类有算术运算符,则也应该定义它的复合赋值运算符, 并且算术运算符的功能由复合赋值运算符来完成.
    3. 下标运算符通常返回所访问对象元素的引用作为返回值,并且通常是返回普通引用,另一个是作为类的常量成员并返回常量引用, 这样一来就可以作用于常量对象了.
    4. 前置递增递减运算符返回对象的引用, 后置递增递减运算符多了一个int类型形参,并且返回类型为临时对象的值.
    5. 解引用运算符(*)与箭头运算符(->)关系比较密切. 解引用运算符返回一个对象的引用. 箭头运算符返回对象的指针,而该对象是通过调用解引用运算符函数得到, 再加一个取地址符.
    6. 关于箭头运算符,它比较特殊,: 它永远不能丢掉成员访问的基本含义, 当我们重载箭头时,可以改变的只有它从哪个对象当中获到成员.因此, 重载箭头运算符时的返回值必须是指向类对象的指针或一个重载了->的类对象.
    7. 类型转换运算符没有显式的返回类型,也没有形参.

    怎么能熟悉运算符重载?

    平时基本很少写运算符重载的相关代码, 想要熟悉,只能多使用他们!!!

  • 相关阅读:
    434. Number of Segments in a String 字符串中的单词个数
    C 递归
    Linux vi/vim
    CSS outline-style 属性
    Object.getPrototypeOf (Object) – JavaScript 中文开发手册
    Java 多线程编程
    HTML canvas strokeText() 方法
    HTML DOM Input Text readOnly 属性
    AngularJS ng-open 指令
    filecmp (File & Directory Access) – Python 中文开发手册
  • 原文地址:https://www.cnblogs.com/yinheyi/p/13620025.html
Copyright © 2011-2022 走看看