簡體   English   中英

如何在運算符重載的情況下返回另一個 object?

[英]How do I return another object with operator overloading?

我有一個包含數組數據的 class。 我需要編寫一個重載運算符,返回 class 的 object 並添加兩個 class ZA3CBC3F9D0CE2F2C15C9ZE1D6 例如:容器 x({1,2,3}) + y({1,2,3})。

我嘗試了以下操作並在數字上有效,但它沒有返回新的 object。 我還包括了構造函數。

構造函數:

Container(){
        length = 0;
        data = nullptr;
    }

    Container(int len){
        length = len;
        data = new double[length];
    }

    Container(std::initializer_list<double> il): Container(il.size())
    {
        std::copy(il.begin(), il.end(), data);
    }

嘗試超載:

 Container& operator+(const Container& other)
    {
        for (auto i=0; i<other.length; i++){
            data[i] = data[i] + other.data[i];
        }
        return *this;

我可以得到反饋嗎?

如何在運算符重載的情況下返回另一個 object?

與從任何 function 返回 object 的方式相同:

Container operator...
//       ^ Return an object; not a reference
{
    Container c ... // create an object
                    // initialise with the desired values
    return c;
}

您實現的內容會修改this ,然后返回對它的引用。 那是一個帶有誤導性名稱的operator+= 如果您希望您的代碼創建另一個實例並返回您需要的 go 一些步驟並閱讀參考等基礎知識。

幸運的是,一旦有了operator+=和復制構造函數,使用它來實現operator+就很簡單了:

Container operator+(const Container& other) {
     Container result{*this};
     result += other;
     return result;
}

有關運算符重載的更多信息,請參見此處:運算符重載的基本規則和習慣用法是什么?

暫無
暫無

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

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