如何在 c++ 中重载"运算符 %"
How to overload "operator %" in c++
我想在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;
相关文章:
- 使用C++中的模板和运算符重载执行矩阵运算
- 为什么这个运算符<重载函数对 STL 算法不可见?
- <T> 通过模板化运算符重载将 std::complex 乘以双倍
- C++20概念:需要运算符重载
- 使用赋值运算符重载从类中返回jobject
- 在运算符重载定义中使用成员函数(const错误)
- 字节到位运算符重载C++
- 为什么在运算符重载时需要参考?
- 类中 c++ 的运算符 + 重载
- 算术复合运算符重载为非成员
- 运算符重载 (+),用于添加两个具有 C++ 的数组
- 交换运算符 + 重载会导致无限递归
- 如何理解新的运算符重载?
- 向量保持复数的运算符重载
- 如何创建运算符重载?
- 链接列表运算符重载没有打印出我想要的内容
- C++:需要帮助了解运算符重载错误
- 使用模板化运算符重载 XOR 运算符失败
- 如何确保接受的C++模板类型使运算符重载?
- 运算符重载使用运算符+添加类模板