Что такое вспомогательные функции в C++?

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

4 ответа

Решение

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

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

Примером может быть функция преобразования любого вида, например, функция преобразования многобайтового кодированного 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;
}

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

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

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

"Вспомогательные функции" описаны в книге Бьярна Страуструпса, и я только что читал о них вчера. По мнению Страуструпа, хороший дизайн класса должен сводить к минимуму количество функций, реализующих класс. По словам Страуструпа, вы не хотите иметь 50 функций в классе. Вместо этого вы используете "вспомогательные функции", которые используют интерфейс класса (вызывайте функции-члены). Возможно, они могут быть (не уверены в этом) определены в общем пространстве имен, чтобы придать смысл своим "отношениям". Вы можете найти абзац в книге в разделе 9.7.5 главы 9.

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

Это всего лишь пример "вспомогательной функции". Поправь меня, читатели, если я ошибаюсь. Спасибо!

Другие вопросы по тегам