首页 > 编程语言 > 详细

c++中的运算符重载operator1(翁恺c++公开课[30]学习笔记)

时间:2020-01-01 17:55:53      阅读:93      评论:0      收藏:0      [点我收藏+]

可以重载的运算符:

技术分享图片

不可以被重载的运算符:

技术分享图片

运算符重载规则:

  1. 只有已经存在的运算符才能被重载,不能自己制造一个c++中没有的运算符进行重载
  2. 重载可以在类或枚举类型内进行,也可以是全局函数,但int、float这种已有的类型内是不被允许的
  3.  不能二元运算符重载为一元(如+、-二元运算符重载完后必须还得是二元),运算符的优先级不能被改变

 

 基本形式:返回值类型 operator被重载的运算符(...)

 例子:

const Integer Integer::operator+(const Integer& that);    //重载Integer类内的+运算 你可以把“operator+”看成一个函数名

const Integer operator+(const Integer& r, const Integer& l);  //重载两个Integer相加的全局函数
class Integer   //完成例子
{
public:
    Integer(int n= 0):i(n) { };
    const Integer operator+(const Integer& n) const
    {
        return Integer(i + n.i);
    } 
...
private:
    int i;   
};

 

 好,我们Integer类对“+”运算符进行了重载,那么我们就来用一下:

Integer x(1),y(5),z(0);
z=x+y;    //正确
z=x+3;    //正确
z=3+y;    //错误

 

第一种是重载的常规用法,z=x+y ===> z=x.operator+(y);当编译器看到“+”时就会去左值“x”里找下有没有对“+”的重载操作,找到后就调用重载的函数将表达式变为“z=x.operator+(y)”

第二种,看到“+”后找左值,左值为x对象,其中对“+”进行了重载,然后右值为整数3,首先把整数3转换为Integer对象后再进行 z=x.operator+(Integer(3))

第三种,左值为3,显然不能将y这个对象转换为int,所以编译器报错

那么问题来了,我们想让第三种也可以重载,怎么做呢,看下边的代码:

class Integer
{
    friend const Integer operator+ (
                     const Integer& lhs,
                     const Integer& rhs);     //将全局函数声明为Integer类的友元,便于访问类内的成员函数
...
}
const Integer operator+(const Integer& lhs, const Integer& ths)
{
    return Integer(lhs.i + rhs.i);  //访问类内成员函数
}

z=3+y;      //正确

 

c++中的运算符重载operator1(翁恺c++公开课[30]学习笔记)

原文:https://www.cnblogs.com/go-ahead-wsg/p/12122352.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!