[英]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.