- •1. Встроенные функции. Назначение. Особенности. Преимущества и
- •2. Встроенные функции. Правила оформления и требования к функции.
- •3. Ссылочные переменные. Назначение ссылок.
- •5. Создание ссылочных переменных. Ссылки и указатели : сходсто и
- •6. Ссылки в роли параметров функции. Чем отличается передача
- •7. Как используя функцию с ссылкой в качестве параметра, защитить
- •8. Временные переменные, ссылочные аргументы и модификатор const.
- •9. Использование ссылок при работе со структурами.
- •10. Когда имеет смысл пользоваться ссылочными аргументами.
- •11. В каких случаях функция использует передаваемые ей данные, не
- •12. В каких случаях функция модифицирует данные для вызывающей
- •13. Аргументы, заданные по умолчанию.
- •14. В каком порядке в заголовке функции присваиваются значения,
- •15. Полиморфизм функций (перегрузка функции)
- •16. Приведите пример сигнатур, различие которых не позволяет
- •17. Когда целесообразно использовать перегрузку функции.
- •18.Шаблоны функций. Правила оформления. Пример.
- •19. Перегруженные шаблоны
- •20. Образование шаблонов и специализация.
16. Приведите пример сигнатур, различие которых не позволяет
использовать их для перегрузки функций.
Некоторые сигнатуры, различаясь между собой, не могут сосуществовать. Например, рассмотрим два таких прототипа:
double cube(double x) ;
double cube(double & x) ;
Можно предположить, что это именно тот случай, когда вы можете воспользоваться перегрузкой функций, так как создается впечатление, что сигнатуры обеих функций различны. Однако подойдем к этой ситуации с точки зрения компилятора. Предположим, мы имеем такой программный код:
cout << cube(x) ;
Аргумент х соответствует как прототипу double x, так и прототипу double & x. Следовательно, компилятор не может определить, какую функцию использовать. В связи с этим, чтобы избежать такой путаницы, проверке сигнатуры функции компилятор считает, что ссылка на тип и сам тип имеют одну и ту же сигнатуру.
17. Когда целесообразно использовать перегрузку функции.
Перегрузка функций вам может показаться исключительно удобным средством, тем не менее, не злоупотребляйте им. Следует зарезервировать перегрузку функций для функций, которые выполняют почти одни и те же действия, но с различными типами данных. Наряду с этим вы, вероятно, захотите проверить, сможете ли добиться тех же целей с помощью использования аргументов, заданных по умолчанию. Например, если вы захотите заменить одну функцию left(), ориентированную на обработку строк, на две перегруженные функции,
используйте следующее выражение:
char * left (const char * str, unsigned n) ; // два
аргумента
char * left (const char * str) ; // один аргумент
Тем не менее, использование одной функции с аргументами, заданными по умолчанию, проще. Прежде всего, нужно создавать только одну функцию, а не две, к тому же программа запрашивает пространство под одну функцию, а не под две. Если вы захотите внести в функцию изменения, вам придется изменять только одну функцию. Тем не менее, если вам понадобятся различные типы аргументов, то аргументы, заданные по умолчанию, здесь недоступны, и вот тут-то вам следует воспользоваться перегрузкой функций.
18.Шаблоны функций. Правила оформления. Пример.
Шаблоны функций представляют собой обобщенное описание функций. Другими словами, они определяют функцию, используя термины обобщенных типов,
вместо которых могут быть подставлены конкретные типы, такие как, например, int или double. Передавая тип в качестве параметра, вы можете заставить компилятор генерировать функцию этого конкретного типа. Поскольку шаблоны позволяют программировать на основе обобщенных типов без использования специализации, этот процесс иногда называют обобщенным программированием. Поскольку типы представлены параметрами, шаблоны функций иногда называют параметризированными типами.
Используйте шаблоны в тех случаях, когда вам нужны функции, применяющие один и тот же алгоритм к различным типам данных. Если перед вами не стоит проблема обратной совместимости и если вас не пугает перспектива вывода на печати более длинного слова, используйте при объявлении типов параметров ключевое слово typename вместо ключевого слова class.
Преимущество использования шаблонов заключается в том, что они генерируют наборы определений более простых и более надежных функций.