2013-10-09 5 views
15

Я пытался понять вспомогательные функции в C++ от The C++ Programming Language by Bjarne Stroustrup. Но книга ничего не объяснила и не использовала ее в классах. Я попытался найти его в Интернете и нашел this. У меня есть суть этого, но все еще неясно, какова истинная цель вспомогательных функций, когда я должен использовать их и в целом, какие вспомогательные функции?Что такое вспомогательные функции в C++?

+1

Возможно, вы можете привести пример? Я предполагаю, что он означает функции, не являющиеся членами, которые делают что-то полезное с объектом класса без необходимости добавлять функции-члены; или, возможно, частные функции-члены, которые помогают реализовать публичные; но для фразы нет универсального значения, поэтому он мог бы означать что-то другое. –

+0

Нет «настоящей цели», это просто полезно использовать. Ничего страшного. – john

+0

Для меня вспомогательная функция - это функция, которая, кстати, полезна. Это функция, которая не очень полезна сама по себе, но помогает вам сделать нужную вам программу. Я бы рассмотрел все функции [ '] (http://en.cppreference.com/w/cpp/algorithm) в качестве вспомогательных функций и многие другие в стандартной библиотеке (например, [функции итератора] (http: //en.cppreference.com/w/cpp/iterator)). –

ответ

22

«Вспомогательная функция» не является термином, который вы найдете в стандарте, ни это точное определение ... стандарт упоминает «вспомогательный класс» или «помощник шаблона» несколько раз для ссылки на класс, который не предназначен для создания экземпляров конечными пользователями, но он обеспечивает полезную функциональность, внутренне используемую в другом классе.

Функции помощника (что, как я считаю, большинство людей означает, когда они говорят) обычно выполняет функции, которые обертывают некоторые полезные функции, которые вы собираетесь использовать повторно, скорее всего, снова и снова. Вы можете создать вспомогательные функции, предназначенные для использования в самых разных видах целей ...

Пример может служить функцией преобразования любого вида, например, функцию преобразования многобайтовые закодированного std::string в std::wstring:

std::wstring s2ws(const std::string& str) 
{ 
    int size_needed = MultiByteToWideChar(CP_UTF8, 0, &str[0], (int)str.size(), NULL, 0); 
    std::wstring wstrTo(size_needed, 0); 
    MultiByteToWideChar(CP_UTF8, 0, &str[0], (int)str.size(), &wstrTo[0], size_needed); 
    return wstrTo; 
} 
+0

[править] –

+3

@MattiVirkkunen: Я отредактировал его так, чтобы это не звучало как определение. – LihO

1

Примером может служить функция проверки ввода, которую вы будете повторно использовать во всей основной функции. Предположим, у вас есть программа, которая запрашивает возраст пользователя, так как возраст является целым числом> 0, вам потребуется отдельная функция, которая заботится о «cin >> users_age;». Если вход удовлетворяет условию, тогда действуйте, иначе попросите пользователя повторно ввести свой возраст.

Это всего лишь пример «вспомогательной функции». Исправьте меня, если я ошибаюсь. Благодаря!

3

Существует большое определение вспомогательной функции от CppCoreGuidline:

Функция помощника является функцией (обычно поставляется писателем класса), который не нужен прямой доступ к представлению класс, но все же рассматривается как часть полезного интерфейса для класса. Размещение их в том же пространстве имен, что и класс, делает их отношение к классу очевидным и позволяет находить их с помощью зависимого от аргумента поиска.

Для получения дополнительной информации вы можете проверить paragraph с ясным примером, из которого берется верхняя цитата.

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