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. 类型转换运算符没有显式的返回类型,也没有形参.

    怎么能熟悉运算符重载?

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

  • 相关阅读:
    hdu 1199 Color the Ball 离散线段树
    poj 2623 Sequence Median 堆的灵活运用
    hdu 2251 Dungeon Master bfs
    HDU 1166 敌兵布阵 线段树
    UVALive 4426 Blast the Enemy! 计算几何求重心
    UVALive 4425 Another Brick in the Wall 暴力
    UVALive 4423 String LD 暴力
    UVALive 4872 Underground Cables 最小生成树
    UVALive 4870 Roller Coaster 01背包
    UVALive 4869 Profits DP
  • 原文地址:https://www.cnblogs.com/yinheyi/p/13620025.html
Copyright © 2011-2022 走看看