为什么操作符 + - * / 返回值应该为const

18 篇文章 0 订阅
class CAClass
{
    
public:
    
    CAClass(int i): m_i(i)
    {
        
    }
    
    // 需要注意返回值为const
    const CAClass operator* (const CAClass &a)
    {
        return CAClass(a.m_i * m_i);
    }
    
    // 需要做连等 a = b = c
    CAClass& operator= (const CAClass& a)
    {
        if (&a == this)
            return *this;
        
        m_i = a.m_i;
        
        return *this;
    }
    
    bool operator== (const CAClass& a)
    {
        return m_i == a.m_i;
    }
    
    // 常对象进行比较
    bool operator== (const CAClass& a) const
    {
        return m_i == a.m_i;
    }
    
private:
    
    int m_i;
    
};


在这里重载的operator *返回值为 const 原因是: 避免下面代码的错误


    CAClass a(1), b(2);
    CAClass c(2);
    
    if (a * b = c)
    {
        std::cout << "a 和 b相等" << std::endl;
    }

其实是想比较大小,但是少些了一个=,在内置类型的时候编译器会报错,所以我们需要遵循内置类型的原则,返回const 就可以避免这类错误的发生

在CAClass类中我们需要注意:

1. operator* 操作符重载返回值是const

2. operator= 操作符重载返回值是引用,非常引用,因为需要满足等号连等的需求

3. operator==操作符重栽函数发生了重载,主要是因为operator*这类的操作返回值是常对象,所以只能调用常成员函数!


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值