【问题标题】:Overload function-call operator and return type重载函数调用运算符和返回类型
【发布时间】:2013-09-25 09:37:56
【问题描述】:

我正在设计一个小型数学库。我有代表功能类的类,例如多项式。实例化它们时,会提供所需的参数(a1、a2、a3),因此对象实际上表示特定的多项式(a1*x^2 + a2*x + a3)。

然后我想提供在某个点(x=3,y=?)评估函数的功能。我已阅读 this wiki 和 Thinking in C++, Vol. 12 第 12 章。 1布鲁斯·埃克尔。他们都说我应该根据运算符的“含义”来决定是否重载。我不是一位经验丰富的 C++ 程序员,但据我所知,如果我有一个代表函数的类并且我使用 obj(x),我期望的值是 y 函数在 x 上的值。

疑问出现在维度上:我也必须表示向量函数 (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),我很乐意纠正它。

【问题讨论】:

    标签: c++ operator-overloading function-call-operator


    【解决方案1】:

    '我应该按值还是按引用返回 y1?毫无疑问,从价值上讲,没有好的方法可以返回对新创建对象的引用。如果复制对象的成本是一个问题,那么您应该寻找某种智能指针技术来提供快速复制。

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

    【讨论】:

    • 感谢您的回答。关于指针,如果我用 new 创建返回对象并返回指向该对象的指针,我该如何管理所有权?我读了这个stackoverflow.com/questions/94227/…,第一个选项 (auto_ptr) 似乎是合理的。你怎么看?
    【解决方案2】:

    只有当它被永久存储在其他地方时,你才会通过引用返回它。由于你的返回值是临时的,所以应该按值返回。

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

    【讨论】:

      猜你喜欢
      • 2015-06-03
      • 2015-01-29
      • 1970-01-01
      • 1970-01-01
      • 2015-04-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多