C++ ++和--運算子過載詳解

2020-07-16 10:04:41
++ 運算子,還可分為字首 ++ 和字尾 ++ 運算子。

過載字首++運算子

C++ 允許過載字首運算子,以使表示式 ++b 能遞增 b 的長度值,並返回結果物件。該運算子可以作為成員函數來過載,這使得它的單個形參是隱含的, 所以過載運算子不需要形參。

以下是Length類的一部分,它顯示了 ++ 運算子的宣告:
class Length
{
    private:
        int len_inches;
    public:
        //字首++的宣告
        Length operator++ ();
        //類的其餘部分,省略
};
以下是運算子的實現語句,它將 len_inches 增加 1 並返回修改的物件:
Length Length::operator++()
{
    len_inches ++;
    return *this;
}
給定該過載之後,就可以使用很容易理解的 ++b 表示式了,它與 b.operator++() 是完全等效的。在程式中可以使用這兩種表示法中的任何一種。

過載字尾++運算子

字尾遞增運算子 b++ 也可以遞增b的長度,但與字首版本不同,因為它返回物件在增加之前的值。過載字尾遞增運算子與過載字首版本稍有不同。

以下是為 Length 類過載字尾遞增運算子的函數:
Length Length::operator++(int)
{
    Length temp = *this;
    len_inches ++;
    return temp;
}
可以發現,第一個區別是該函數有一個 int 型別的虛擬形參,這個形參在函數的主體中是不會被使用的,這只是一個約定,它告訴編譯器遞增運算子正在字尾模式下被過載。第二個區別是使用臨時區域性變數 temp 來獲取遞增之前物件的值。該值將被儲存並在稍後由函數返回。