繁体   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