常量的副本

Copy of a constant?

本文关键字:副本 常量      更新时间:2023-10-16
Polynomial operator + (const Polynomial& p);
//Adds existing Polynomial to p, returning the result

因为我们不能改变const的值,有没有办法复制这个p来访问p的函数呢?

对不起,伙计们在工作和相当显示整个程序,但在Poly.H在私人领域它读:私人:列表& lt;Term> poly

在polytest。cpp

如果我需要两个多项式P_add = poly1 + poly2

我需要在运算符+中写函数来添加类似的项。

如果您需要复制,那么只需在函数

中复制它
Polynomial operator + (const Polynomial& p);
{
    Polynomial copy = p;
    // do stuff
}

现在,仅仅因为pconst并不意味着你不能使用它的成员/函数。典型的operator+看起来像

Something operator + (const Something& s);
{
    return Something(this->some_memeber + s.some_memeber,
        this->another_memeber + s.another_memeber);
}

如果您需要operator+内部的副本,最直接的方法是通过(const)值传递p:

Polynomial operator+ (Polynomial p);

现在p是您传入的对象的副本,您可以在operator+中弄乱。当然,如果你传递const值,比如

Polynomial operator+(const Polynomial p);

则副本本身将是const,因此您将只能访问其const成员函数。

正如在评论中提到的,有时传递const引用并确保您只访问const成员函数是您实际需要的,因为您可以避免额外的复制。然而,在某些情况下,复制是必要的(这里很可能不是),例如在实现著名的复制-交换习惯用法时,在这种情况下,按值传递对象是一种可行的方法,也是实现预期效果的最简单的方法。

听起来,您缺少constPolynomial的一些成员函数的说明符,例如,您可能有:

// Can modify *this.
std::vector<double> coefficients() { … }

当你需要时:

// Cannot modify *this.
std::vector<double> coefficients() const { … }

添加const指定符将成员函数中this的类型从Polynomial*更改为const Polynomial*。在const引用中,只能调用const成员函数。(您仍然可以在非const引用上调用const成员函数)

编辑:您可能会在成员函数的末尾引用const说明符,如下所示:

class Test
    // cannot modify members of Test
    void test() const;
    // can modify members of Test
    void test2();
};

当对const对象进行操作时,只能在最后调用声明为const的方法。

如果需要修改const成员函数中的成员(这种情况并不常见),可以将其声明为mutable

前面的const说明符Polynomial&p意味着它是一个对多项式的const引用,因此你不能修改p的值。I与访问函数无关。如果方法是在类中声明的,则可以访问同一类中的所有方法。

你可以做一个简单的复制来处理拷贝而不是输入参数的引用:

Polynominal p2(p);

Polynominal p3 = p;