簡體   English   中英

使用一元加運算符

[英]Use of unary plus operator

我聽說它被用作重載運算符+

class MyClass
{
    int x;
public:
    MyClass(int num):x(num){}
    MyClass operator+(const MyClass &rhs)
    {
        return rhs.x + x;
    }
};

int main()
{
    MyClass x(100);
    MyClass y(100);
    MyClass z = x + y;
}

這真的是使用一元加運算符還是它真的是一個二元+運算符?

這不是重載和使用一元+ ..你需要使一個自由函數或使成員函數取0參數

class MyClass
{
    int x;
public:
    MyClass(int num):x(num){}
    MyClass operator+() const
    {
        return *this;
    }
};

int main() {
  MyClass x = 42;
  + x;
}

那是一個二元+運算符。 要使一元加運算符超載,你需要這樣的東西

當operator-function是一個成員函數時,它還有一個參數( this ),而不是聲明中明確提到的參數。 所以在你的情況下它是二進制+,第一個參數是this ,第二個是傳遞的參數。

之前已經問了好幾次。

您的運算符+是二進制的。 如果定義為成員函數,則需要為const。

class MyClass
{
    int x;
public:
    MyClass(int num):x(num){}
    MyClass operator+(const MyClass &rhs) const
    {
        return rhs.x + x;
    }
};

它通常用operator + =來實現

請注意,您已經切換了交換性,但它將起作用,因為int是可交換的。

作為成員的一元+運算符不帶參數,也不會修改對象,因此應該是const。 實現取決於您的對象。 您可以將它用作int的“abs”。 (將其用作無操作目的很少)。

    MyClass MyClass::operator+() const
    {
        return ( x >= 0 ) ? MyClass( x ) : MyClass(-x);
    }

暫無
暫無

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

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