簡體   English   中英

如何在c ++中重載“operator%”

[英]How to overload “operator %” in c++

我想在c ++中重載%運算符,以避免手動編輯大量代碼。 我試過這個:

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

在我的標題中,但它不起作用,因為“非成員運算符需要帶有類或枚舉類型的參數”。 我對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;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM