簡體   English   中英

C ++重載運算符

[英]C++ overloading operators

我在程序中重載了運算符“ +”,“-”,“ /”和“ *”。 基本上,我有一個對象,它是動態分配的雙精度值數組。 我已經擁有了整個程序,但無法克服這些重載。

我的構造函數如下所示:

table::table(int size) {
    this->size = size;
    tab = new double[size];
    count++;
}

我寫了這樣的東西:

table & table::operator-(const table &tab3 )
{
        table * tab_oper2 = new table(size);
        for(int i=0; i< tab3.size; i++) 
        {
            (*this).tab[i] -= tab3.tab[i];
        }
        return *this;
}

通常可以正常工作,但這並不是通常的好方法。 我的教練告訴我嘗試將(* this)切換為* tab_oper2,將其作為參考返回,但它不起作用。 拜托,有人可以告訴我該怎么做嗎?

C ++是一種面向價值的語言。 返回一個table (而不是一個table& )。 在局部變量中構造返回值,然后將其返回。 並且不要忘記三個規則:給出了所顯示的少量代碼,您將需要一個復制構造函數,一個賦值運算符和一個析構函數。 (當然,如果您使用std::vector而不是new[] ,那么所有這些都將為您解決。)

您應該按值返回第三個對象result

table table::operator-(const table &t) const
{
        table result(size);
        for(int i=0; i< t.size; i++) 
        {
            result.tab[i] = this->tab[i] - t.tab[i];
        }
        return result;
}

運營商-從運營商的不同-=你在寫。 當您使operator-超載時,您不應操縱this

您正在分配結果表,但未填充它。 填充結果表,它將起作用。

table & table::operator-(const table &tab3 )
{
        table * tab_oper2 = new table(size);
        for(int i=0; i< tab3.size; i++) 
        {
            tab_oper2->tab[i] = tab[i] - tab3.tab[i];
        }
        return *tab_oper2;
}

暫無
暫無

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

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