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

Поиск:

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


Новичок



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

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



скажем есть у нас функции вида:
Код

int название (int a, char b);

надо эту функцию присавивать разным переменным. потом просто вызывать 
Код

имя_переменной(45,'a');

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


Это сообщение отредактировал(а) peetonn - 17.12.2006, 19:33
PM MAIL   Вверх
Xenon
Дата 17.12.2006, 19:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Код

int func (int x)
{
  return x/2;
}
////
int a=func(2);



--------------------
user posted image  
PM MAIL   Вверх
GIK
Дата 17.12.2006, 19:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Добрый человек
**


Профиль
Группа: Участник
Сообщений: 985
Регистрация: 3.6.2005
Где: я только не небыв ал

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



Цитата

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

Может указатель поможет? Хотя что понимать под присваиванием.



--------------------
Математика=>пиво=> програмирование, три вещи последовательны и совместимы !!!
Программирование - это не деятельнось! Программирование - это состояние души!
Бог - самый крутой программист.
PM MAIL ICQ   Вверх
MAKCim
Дата 17.12.2006, 19:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Воін дZэна
****


Профиль
Группа: Экс. модератор
Сообщений: 5644
Регистрация: 10.12.2005
Где: Менск, РБ

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



Код

typedef int (*function_t)(int, char);
int F(int a, char b) {
...
}
...
function_t a, b, c;
a = b = c = &F;
a(0, 'a');
b(1, 'b');
c(2, 'c');


Это сообщение отредактировал(а) MAKCim - 17.12.2006, 19:51


--------------------
Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі ©

PM MAIL   Вверх
peetonn
Дата 17.12.2006, 19:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



дык, ясное дело, что както через указатель (или даже ссылку) но как? - в том и вопрос
Цитата

Хотя что понимать под присваиванием.

вот наглядный пример:
Код

int f1(int x, char a){
    cout << x << a;   
    return 1;
}
int f2(int x, char a){
    cout << a << x;   
    return 2;
}

...
// где то в коде:
if (...) a = f1;  // а - переменная, т.е. функция вида int (int,char)
else a = f2;

a(45,'A');
...

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


Это сообщение отредактировал(а) peetonn - 17.12.2006, 19:49
PM MAIL   Вверх
MAKCim
Дата 17.12.2006, 19:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Воін дZэна
****


Профиль
Группа: Экс. модератор
Сообщений: 5644
Регистрация: 10.12.2005
Где: Менск, РБ

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



peetonn, 
я же написал


--------------------
Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі ©

PM MAIL   Вверх
peetonn
Дата 17.12.2006, 19:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



MAKCim, да похоже на то! ща попробую.....
PM MAIL   Вверх
Daevaorn
Дата 17.12.2006, 19:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Цитата(peetonn @  17.12.2006,  20:48 Найти цитируемый пост)
но как?

Смотри книгу или пост товарища MAKCim'a
PM MAIL WWW   Вверх
GIK
Дата 17.12.2006, 19:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Добрый человек
**


Профиль
Группа: Участник
Сообщений: 985
Регистрация: 3.6.2005
Где: я только не небыв ал

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



Тока * надо убрать сдесь
typedef int (*function_t)(int, char*);


--------------------
Математика=>пиво=> програмирование, три вещи последовательны и совместимы !!!
Программирование - это не деятельнось! Программирование - это состояние души!
Бог - самый крутой программист.
PM MAIL ICQ   Вверх
MAKCim
Дата 17.12.2006, 19:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Воін дZэна
****


Профиль
Группа: Экс. модератор
Сообщений: 5644
Регистрация: 10.12.2005
Где: Менск, РБ

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



GIK, 
исправлено (просто торопился)


--------------------
Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі ©

PM MAIL   Вверх
GIK
Дата 17.12.2006, 19:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Добрый человек
**


Профиль
Группа: Участник
Сообщений: 985
Регистрация: 3.6.2005
Где: я только не небыв ал

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



Цитата

MAKCim, да похоже на то! ща попробую..... 

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

Добавлено @ 19:59 
MAKCim, не сочти меня наглым, АГА? smile

Добавлено @ 20:05 
Вот например пример который присваивает значение переменной, а потом преобразует его в указатель, но тебе надо преобразовать его в указатель на функцию, и все. Но не знаю как это сделать smile Может товаришь MAKCim знает?

Код


#include<iostream>
#include<vector>
using namespace std;

int F(int a, char b);
int F(int a, char b) {
return 123;
}
int main(int argc, char* argv[])
{
 int *p(int a, char b);
 int *p2;
 int a=F(123, 'w');
 //p=(int *) a; nizya pripayat ukazatelu na funkciyu !!!
 p2=(int *) a;


 char ch;
 cin>>ch;
     return 0;

}



--------------------
Математика=>пиво=> програмирование, три вещи последовательны и совместимы !!!
Программирование - это не деятельнось! Программирование - это состояние души!
Бог - самый крутой программист.
PM MAIL ICQ   Вверх
Daevaorn
Дата 17.12.2006, 20:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



GIK, указатель на переменную и указатель на функцию это совершенно разные вещи(второй может быть больше по размеру), поэтому надо обходится без такого привидения или reinterpret_cast использовать.
PM MAIL WWW   Вверх
MAKCim
Дата 17.12.2006, 21:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Воін дZэна
****


Профиль
Группа: Экс. модератор
Сообщений: 5644
Регистрация: 10.12.2005
Где: Менск, РБ

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



Цитата

второй может быть больше по размеру

не может, он равен размеру void*
указатель на функцию   !=   указатель на метод
Цитата

Может товаришь MAKCim знает?

не понял я, что ты хотел своим примером показать


--------------------
Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі ©

PM MAIL   Вверх
peetonn
Дата 17.12.2006, 22:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



на самом деле, Максим написал как раз то, что я и имел ввиду.
Спасибо, MAKCim
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

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

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


 




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


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

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