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