Polynomial operator + (const Polynomial& p);
//Adds existing Polynomial to p, returning the result
因为我们不能改变const的值,有没有办法制作这个p的副本以允许我访问p的函数?
对不起工作的人并且完全显示整个程序,但在私人领域的Poly.H中它显示: 私人的: 列表<术语>聚
所以在PolyTest.cpp中
如果我需要两个多项式 p_add = poly1 + poly2
我需要在operator +中编写函数来添加类似的术语。希望这有用。
答案 0 :(得分:6)
如果您需要复制,只需将其复制到函数
中Polynomial operator + (const Polynomial& p);
{
Polynomial copy = p;
// do stuff
}
现在只是因为p
const
并不意味着您无法使用其成员/功能。典型的operator+
看起来像
Something operator + (const Something& s);
{
return Something(this->some_memeber + s.some_memeber,
this->another_memeber + s.another_memeber);
}
答案 1 :(得分:3)
如果您需要operator+
内的副本,最简单的方法是将p
传递给(const
)值:
Polynomial operator+ (Polynomial p);
现在p
是您传递的对象的副本,您可以在operator+
内陷入困境。当然,如果您通过const
值,如
Polynomial operator+(const Polynomial p);
然后副本本身将为const
,因此您只能访问其const
成员函数。
正如评论中所提到的,有时会通过const
引用并确保您只访问const
成员函数是您实际需要的,因为您可以避免使用其他副本。然而,有些情况下需要复制(很可能不在这里),例如在实现着名的copy-and-swap idiom时,在这种情况下,按值传递对象是要走的路,以及实现最简单的方法期望的效果。
答案 2 :(得分:1)
从它的声音来看,你在const
的某些成员函数上缺少一个Polynomial
说明符,例如,你可能有:
// Can modify *this.
std::vector<double> coefficients() { … }
当您需要时:
// Cannot modify *this.
std::vector<double> coefficients() const { … }
添加const
说明符会将成员函数中this
的类型从Polynomial*
更改为const Polynomial*
。在const
引用上,您只能调用const
个成员函数。 (您仍然可以在非const
引用上调用const
成员函数。)
答案 3 :(得分:0)
编辑: 您可能正在引用成员函数末尾的const说明符,如下所示:
class Test
// cannot modify members of Test
void test() const;
// can modify members of Test
void test2();
};
在const对象上操作时,最后只能调用声明为const的方法。
如果您需要修改const成员函数内的成员(通常不是这种情况),您可以将其声明为mutable
多项式前面的const说明符&amp; p表示它是多项式的const引用,因此您无法修改p的值。 我与访问功能无关。如果在您的类中声明了该方法,则可以访问同一类中的所有方法。
然而,您可以制作一个简单的副本来处理副本,但不是对输入参数的引用:
Polynominal p2(p);
或
Polynominal p3 = p;