Модераторы: bsa
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> передавать функцию в функцию 
:(
    Опции темы
Mormishka
Дата 31.1.2011, 13:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 236
Регистрация: 25.8.2010

Репутация: нет
Всего: нет



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

int f(int x) 
{
result x;
}
есть функция в которой в качестве аргумента функция
Код

int fun(int (*pf)(int x) )
{
result (pf(1));
}

Т.е. можно написать
x=fun(f)
Это будет работать,
например у меня есть другая функция
Код

int f2(int x,int y) 
{
result (x+y);
}

Что нужно сделать чтоб работало x=fun(f2) ?

PM MAIL   Вверх
baldina
Дата 31.1.2011, 14:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3433
Регистрация: 5.12.2007
Где: Москва

Репутация: 15
Всего: 101



Код

int fun2 (int (*pf)(int x, int y))
{
  return (pf (1, 2));
}


Это сообщение отредактировал(а) baldina - 31.1.2011, 14:04
PM MAIL   Вверх
bsa
Дата 31.1.2011, 17:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 85
Всего: 196



Цитата(Mormishka @  31.1.2011,  14:32 Найти цитируемый пост)
Как сделать так, чтобы в функцию можно было передать функции с разными аргументами
Цитата(Mormishka @  31.1.2011,  14:32 Найти цитируемый пост)
Что нужно сделать чтоб работало x=fun(f2) ?
Вот смотри, f1 у тебя принимает один параметр, f2 - два. Как ты собираешься написать fun, чтобы она работала с обоими этими типами функций? Что она будет передавать f2 в качестве второго аргумента?

PM   Вверх
Mormishka
Дата 31.1.2011, 17:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 236
Регистрация: 25.8.2010

Репутация: нет
Всего: нет



Цитата(bsa @ 31.1.2011,  17:18)
Цитата(Mormishka @  31.1.2011,  14:32 Найти цитируемый пост)
Как сделать так, чтобы в функцию можно было передать функции с разными аргументами
Цитата(Mormishka @  31.1.2011,  14:32 Найти цитируемый пост)
Что нужно сделать чтоб работало x=fun(f2) ?
Вот смотри, f1 у тебя принимает один параметр, f2 - два. Как ты собираешься написать fun, чтобы она работала с обоими этими типами функций? Что она будет передавать f2 в качестве второго аргумента?

Понял. Переформулирую вопрос. Можно ли делать функции с параметрами по выбору?
PM MAIL   Вверх
baldina
Дата 31.1.2011, 18:05 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3433
Регистрация: 5.12.2007
Где: Москва

Репутация: 15
Всего: 101



Цитата(Mormishka @  31.1.2011,  17:55 Найти цитируемый пост)
Понял. Переформулирую вопрос. Можно ли делать функции с параметрами по выбору? 

нет. потому что нет случая, когда это нужно. в случаях, когда кажется, что это нужно, есть более изящные и выразительные способы достичь нужного результата.
если приведешь пример, для чего это потребовалось, покажем, как лучше сделать (и объясним почему оно лучше)
PM MAIL   Вверх
mes
Дата 31.1.2011, 22:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 79
Всего: 250



Цитата(Mormishka @  31.1.2011,  16:55 Найти цитируемый пост)
Можно ли делать функции с параметрами по выбору? 

перегрузить для каждой комбинации..  (если С++, а не С)
smile

Добавлено через 5 минут и 19 секунд
Цитата(Mormishka @  31.1.2011,  12:32 Найти цитируемый пост)
result x;

может :
Код

return x;

?

Это сообщение отредактировал(а) mes - 31.1.2011, 22:32


--------------------
PM MAIL WWW   Вверх
bsa
Дата 1.2.2011, 15:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 85
Всего: 196



Цитата(Mormishka @  31.1.2011,  18:55 Найти цитируемый пост)
Можно ли делать функции с параметрами по выбору? 

Что значит "по выбору"? Хочешь задаешь X, хочешь Y, а хочешь оба?
С++ есть возможность использовать параметры со значениями по умолчанию. Такое применяется, когда ряд параметров функции редко когда отличен от определенного значения.
В С/С++ есть возможность делать функции с переменным числом параметров. Пример такой функции - printf. Но это очень небезопасно, поэтому пользоваться этим крайне не рекомендуется.
PM   Вверх
halfnode
Дата 1.2.2011, 16:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 16
Регистрация: 18.1.2011

Репутация: нет
Всего: нет



Если я правильно понял автора топа, то mes крайне прав. smile
создается два прототипа функции f()

Код

int f(int);
int f(int, int);


Потом, пишешь 2 реализации функции:
Код

int f(int x)
{
    int k = x*x;
    return k;
}

int f(int x, int y)
{
   int k = x*y;
   return k;
}


После всего этого, когда ты будешь вызывать функцию f, она будет смотреть на кол-во принимаемых параметров. 
Если параметр один, то исполнится функция f(int), если параметров будет два, то f (int,int)
Называется перегрузка функций.
В С++ правда только.

Это сообщение отредактировал(а) halfnode - 1.2.2011, 16:43
PM MAIL   Вверх
Mormishka
Дата 1.2.2011, 16:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 236
Регистрация: 25.8.2010

Репутация: нет
Всего: нет



Да, но можно ли написать вот так?
Код

int fun((pf*))
{
  result f(1);
}
x=fun(f)

PM MAIL   Вверх
halfnode
Дата 1.2.2011, 17:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 16
Регистрация: 18.1.2011

Репутация: нет
Всего: нет



Я не знаток...далеко не знаток, но:
Код

int fun((pf*))   // указатель на пользовательский тип данных.
{
  result f(1);    // вряд ли. Никогда не видел. (Не означает что невозможно) :) Да и еще, число как параметр? О_О result? >_<
}
x=fun(f)


Возможно так было бы корректнее:
Код

int fun((pf*))
{
 /*или любой другой, в зависимости от результата функции f*/
  int f_res;
  f_res = f(1)
  return f_res;
}
x=fun(f)

PM MAIL   Вверх
bsa
Дата 1.2.2011, 17:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 85
Всего: 196



Цитата(Mormishka @  1.2.2011,  17:58 Найти цитируемый пост)
Да, но можно ли написать вот так?
Написать можно, но не скомпилируется. Так как компилятор не знает ни конструкции "(pf*)", ни "result f(1)".

PM   Вверх
mes
Дата 1.2.2011, 18:39 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 79
Всего: 250



Цитата(Mormishka @  1.2.2011,  15:58 Найти цитируемый пост)
но можно ли написать вот так?

главное понять что есть на входе, и что должно быть на выходе.. 
если задачу можно сформулировать и представить, значит ее можно решить.. 
возможно, то что нужно, легко получается  с помощью function и  bind... 
но учитывая Ваше продолжительное настаивание на result, говорит о том, что Вам пока рано подходить к решению подобных вопросов..
для начала бы не мешало бы подучить основы программирования.. 



--------------------
PM MAIL WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

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


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.3898 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.