2013-09-25 36 views
2

我正在设计一个小数学库。我有一些代表功能类的类,例如多项式。当它们被实例化时,提供所需的参数(a1,a2,a3),以便对象实际上表示一个特定的多项式(a1 * x^2 + a2 * x + a3)。重载函数调用操作符和返回类型

然后我想提供在某个点(x = 3,y =?)评估函数的功能。我读过this wiki和Thinking in C++,Vol。 1由布鲁斯Eckel。他们都说我应该根据操作员的“含义”来决定是否超载。我不是一个有经验的C++程序员,但就我所知,如果我有一个代表功能的类,并且我使用obj(x),我期望的是该函数在该x处的值为y

这个疑问出现在维度上:我也必须表示矢量函数(http://en.wikipedia.org/wiki/Vector_function),比如a1 * x1 + a2 * x2,并且我将拥有这样的签名:operator()(real x1, real x2)。我的问题是返回类型。如果y1 = a1 * x1 + a2 * x2是一个向量(数学和C++),我应该返回y1值还是参考?我应该还提供const版本吗?

PS这是我在Stackoverflow.com上的第一个问题,所以请告诉我,如果问题的某些内容是错误的(标题,标签,问题本身:P),我很乐意改正它。

回答

1

'我应该通过价值还是参考返回y1?'毫无疑问,没有什么好的方法可以将引用返回给新创建的对象。如果复制对象的成本是一个问题,那么你应该看看某种智能指针技术来提供快速复制。

'我也应该提供一个const版本吗?'从你所说的你应该只提供一个const版本。

+0

谢谢你的回答。关于指针,如果我用new创建返回对象并返回指向这个对象的指针,我该如何管理所有权?我读这个http://stackoverflow.com/questions/94227/smart-pointers-or-who-owns-you-baby和第一个选项(auto_ptr )似乎是合理的。你怎么看? –

1

如果将其永久存储在其他地方,则只能通过引用返回。由于您的返回值是临时值,因此应该按值返回。

由于您没有更改函数的任何内容,所以方法应该是const。