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

怎么能熟悉运算符重载?

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

posted @ 2020-09-05 22:20  殷大侠  阅读(839)  评论(0编辑  收藏  举报