2013-09-25 2 views
2

Я разрабатываю небольшую математическую библиотеку. У меня есть классы, которые представляют классы функций, например. многочлен. Когда они создаются, требуются параметры (a1, a2, a3), поэтому объект фактически представляет собой конкретный многочлен (a1 * x^2 + a2 * x + a3).Оператор вызова функции перегрузки и тип возврата

Затем я хочу предоставить функциональные возможности оценки функции в определенной точке (x = 3, y =?). Я читал this wiki и главу 12 мышления в C++, том. 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), и я с радостью исправлю это.

ответ

1

«Должен ли я возвращать y1 по значению или по ссылке?» По значению, несомненно, нет хорошего способа вернуть ссылку на вновь созданный объект. Если стоимость копирования ваших объектов является проблемой, вы должны посмотреть на какую-то технику умных указателей, чтобы обеспечить быстрое копирование.

«А я должен предоставить также версию const?» Из того, что вы сказали, вы должны предоставить только версию const.

+0

благодарим вас за ответ. О указателях, если я создаю возвращаемый объект с новым и вернул указатель на этот объект, как мне управлять правом собственности? Я прочитал этот http://stackoverflow.com/questions/94227/smart-pointers-or-who-owns-you-baby, и первый вариант (auto_ptr ) кажется разумным. Что ты думаешь о? –

1

Вы только возвращаете что-то по ссылке, если оно постоянно хранится где-то в другом месте. Поскольку ваше возвращаемое значение является временным, оно должно быть возвращено значением.

Поскольку вы ничего не меняете в функции, метод должен быть const.

Смежные вопросы