Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: Аргументы по умолчанию  (Прочитано 8756 раз)
0 Пользователей и 1 Гость смотрят эту тему.
Olegator
Команда клуба

ru
Offline Offline
Пол: Мужской

« : 31-12-2005 13:31 » 

Кто-нибудь пользуется?
Прочитал в книжке:
Цитата
Хороший стиль программирования 3.14
Использование аргументов по умолчанию может упростить написание вызовов функций. Однако некоторые программисты считают, что для ясности лучше явно указывать все аргументы.
« Последнее редактирование: 31-12-2005 13:37 от Olegator » Записан
Mayk
Гость
« Ответ #1 : 31-12-2005 16:01 » 

Стандартная библиотека c++ пользует. Смотреть для примера sync_with_stdio()
Иногда довольно удобная вещь.
Хотя чаще это просто удобство, чем полезность.
Ну лениво иногда  указывать все аргументы в каком-нибдь QWidget::QWidget( QWidget* parent=0, const char* name=0, WFlags f=0).
Записан
nikedeforest
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #2 : 31-12-2005 17:22 » 

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

ещё один вопрос ...
Olegator
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #3 : 31-12-2005 17:33 » 

При чём здесь неизвестность количества параметров?
количество параметров известно. Просто может быть известно значение аргументов, которые, допустим часто вводятся. и тогда их можно выставить по умолчанию.
Например функция, которая считает объём куба.
int ОбъёмКуба(int высота=1, int длина=1, int ширина=1)
{return высота*длина*ширина}
И если функцию вызвать ОбъёмКуба(), то получится 1
если ОбъёмКуба(10), то 10
если ОбъёмКуба(10, 2) то 20 и т.д.
« Последнее редактирование: 31-12-2005 17:48 от Olegator » Записан
Alf
Гость
« Ответ #4 : 31-12-2005 20:30 » 

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

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

Первоначальный вариант метода:

Код:
void WriteLine(const CString& msg);

После расширения:

Код:
enum ELogLevel
{
  ELL_Detail,
  ELL_Info,
  ELL_Warning,
  ELL_Error
};
...
void WriteLine(const CString& msg, enum ELogLevel logLvl = ELL_Info);

Теперь можно задать для каждого сообщения его уровень и выводить только сообщения, уровень которых не ниже заданного оператором. При этом весь старый код продолжает работать, все выдаваемые им сообщения считаются информационными. Если бы не было возможности задать значение параметра logLvl по умолчанию, пришлось бы либо создавать перегруженный метод WriteLine с двумя параметрами, либо вылавливать по всей программе его вызовы и добавлять второй параметр.
Записан
nikedeforest
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #5 : 31-12-2005 22:03 » new

Млин, извенясь, я прчитал одно а подумал о другом. Извиняюсь, что-то в голову ударило (наверное НГ), я подумал о списке парамтров переменной длины. Прошу прощения. А про аргументы по умолчанию Альф хорошо (с прмером) все написал.
Удачи.
Записан

ещё один вопрос ...
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines