-1

我在程序中遇到了重载运算符“+”、“-”、“/”和“*”的问题。基本上我有一个对象,它是动态分配的双值数组。我有整个程序,但我无法通过这些重载。

我的构造函数如下所示:

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,将其作为参考返回,但它不起作用。拜托,有人能告诉我如何正确地做到这一点吗?

4

3 回答 3

5

C++ 是一种价值导向的语言;返回 a table(而不是 a table&)。在局部变量中构造返回值,并返回它。并且不要忘记三个规则:鉴于您展示的小代码,您将需要一个复制构造函数、一个赋值运算符和一个析构函数。(当然,如果您使用std::vector, 而不是new[],所有这些都会为您处理。)

于 2013-04-23T17:28:38.280 回答
0

您应该按值返回第三个对象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.

于 2013-04-23T17:34:31.420 回答
-3

您正在分配一个结果表,但您没有填充它。填充结果表,它将起作用。

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;
}
于 2013-04-23T17:29:12.550 回答