如何在 c++ 中重载"运算符 %"

How to overload "operator %" in c++

本文关键字:运算符 重载 c++      更新时间:2023-10-16

我想在c++中重载%操作符,以避免手工编辑一大块代码。我试过了:

static float operator %(const float& left, const float& right);

在我的头中,但它不起作用,因为"非成员操作符需要具有类或enum类型的形参"。我对c++比较陌生,我该怎么做?

操作符重载必须至少有一个参数为用户定义类型。所以你不能这么做

这意味着当所有操作数都是非类/枚举类型时,不能重载操作符。即,当两边都是float(或int,或任何其他基本类型)时,您不能重写%的行为。

如前所述,不能为内部类型定义重载操作符。

但是,如果您愿意利用隐式类型转换的优势,则可以在实现重载%操作符的包装器类型上对浮点数进行一次强制转换,从而达到接近所需的效果。

class FloatWrapper
{
private:
    float m_Float;
public:
    FloatWrapper(float Value):
      m_Float(Value)
    {
    }
    friend float operator%(const FloatWrapper& lhs, const FloatWrapper& rhs)
    {
        //your logic here...
        return (int)lhs.m_Float % (int)rhs.m_Float;
    }
};
int main()
{
float Value1 = 15.0f;
float Value2 = 4.0f;
float fMod1 = (FloatWrapper)Value1 % Value2;
float fMod2 = Value1 % (FloatWrapper)Value2;
return 0;
}
class Test
{
public:
     float operator%(float);
};

在c++中,不需要将操作符声明为静态,这与c#相反。参数可以是任何类型,返回值也可以是。第一个类型是类本身。

的例子:

Test test;
float x = test % 10.2f;