Я проектирую небольшую математическую библиотеку. У меня есть классы, которые представляют классы функций, например многочлен. Когда они создаются, предоставляются необходимые параметры (a1, a2, a3), так что объект фактически представляет определенный полином (a1 * x ^ 2 + a2 * x + a3).
Затем я хочу предоставить функциональность оценки функции в определенной точке (х = 3, у =?). я прочел эта вики и глава 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), и я с удовольствием исправлю это.
‘Должен ли я вернуть y1 по значению или по ссылке?’ По значению, несомненно, нет хорошего способа вернуть ссылку на вновь созданный объект. Если стоимость копирования ваших объектов является проблемой, то вам следует обратиться к какой-либо технологии интеллектуального указателя, чтобы обеспечить быстрое копирование.
«И я должен предоставить также const версию? Из того, что вы сказали, вы должны предоставить только постоянную версию.
Вы возвращаете что-либо только по ссылке, если оно постоянно хранится где-то еще. Поскольку ваше возвращаемое значение является временным, оно должно быть возвращено по значению.
Поскольку вы ничего не меняете в функции, метод должен быть постоянным.