Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 07.09.2014, 22:39   #1
marenko.lilia
Пользователь
 
Аватар для marenko.lilia
 
Регистрация: 25.12.2013
Сообщений: 91
По умолчанию перегруженные функции - вопрос к специалистам

Вопрос больше к практикам:
Как часто вам приходится использовать перегруженные функции при написании своих программ?
И вообще - в каких случаях в основном вы их применяете?
marenko.lilia вне форума Ответить с цитированием
Старый 07.09.2014, 23:09   #2
waleri
Старожил
 
Регистрация: 13.07.2012
Сообщений: 6,331
По умолчанию

http://en.wikipedia.org/wiki/Visitor_pattern
waleri вне форума Ответить с цитированием
Старый 08.09.2014, 01:51   #3
_Bers
Старожил
 
Регистрация: 16.12.2011
Сообщений: 2,329
По умолчанию

Цитата:
Сообщение от marenko.lilia Посмотреть сообщение
Вопрос больше к практикам:
Как часто вам приходится использовать перегруженные функции при написании своих программ?
И вообще - в каких случаях в основном вы их применяете?
1. Часто.

2. Есть одно и тоже по смыслу действие. Но в зависимости от аргументов, алгоритм действий должен быть другим.

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


Пример1:

Код:
// вариативный тип данных умеет хранить значения разных типов

Variant v1 = 10; //запустился конструктор для int
Variant v2 = true; //запустился конструктор для bool
для Variant конструкторы, операторы присвоения и многие другие перегружаются под многочисленные типы, что бы он мог работать со всеми ними.

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

Пример2

Иногда нужно отправить сообщения объектам классов из любой точки программы:

Код:
struct example1
{
    void readmessage(int); //<--- хочет получать сообщения типа int
    void readmessage(bool); //<--- хочет получать сообщения типа bool
};
struct example2
{
    void readmessage(int); //<--- хочет получать сообщения типа int
};

...

//где то в программе создаются объекты классов:
example1 e1;
example2 e2;

...

//где то в совершенно другой точке программы мы захотели послать сообщения :

SendMessage(10); //получит e1 и e2
// для них сработает: e1.readmessage(10);
// для них сработает: e2.readmessage(10);

SendMessage(true); //получит только e1, 
//потому что для e2 нет перегруженной функции, 
//которая умеет принимать сообщения типа bool
Грубо говоря, система которая обеспечивает передачу сообщений знает только про методы по имени readmessage.

Если они есть у получателей - дергает их.
Если нет... ну значит не дергает.

Смысл в том, что система сообщений не телепат и не знает кому она будет отправлять сообщения.
Она ничего не знает о классах example1 и example2.

Но что бы доставить сообщения, ей нужно знать, какую функцию дернуть передавая посылку.

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

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

Последний раз редактировалось _Bers; 08.09.2014 в 01:56.
_Bers вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Перегруженные методы, функции DELPHI 7 iCaesy Помощь студентам 1 03.10.2011 21:02
Перегруженные методы, функции DELPHI 7 iCaesy Помощь студентам 4 25.09.2011 19:02
Вопрос к специалистам Mutagena Общие вопросы Delphi 3 28.11.2009 22:43