2013-09-25 60 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。