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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Вопрос из книги Страуструпа 
:(
    Опции темы
shuttle
Дата 17.6.2009, 12:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Как понимать следующее описание? Где оно может пригодиться?

Код

typedef int (rifii&) (int, int);


Что то не могу ссобразить.
--------------------
PM MAIL   Вверх
xvr
Дата 17.6.2009, 12:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

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



Референс на функцию, принимающую 2 параметра (оба int) и возвращающую int.
Цитата

Где оно может пригодиться?
Это надо спрашивать у того, кто это написал  smile 
PM MAIL   Вверх
shuttle
Дата 17.6.2009, 12:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



это Страуструп написал в книге "Язык программирования С++". Очень кстати толковая книга.
--------------------
PM MAIL   Вверх
kemiisto
Дата 17.6.2009, 12:37 (ссылка)    | (голосов:5) Загрузка ... Загрузка ... Быстрая цитата Цитата


Дикий Кот. =^.^=
****
Награды: 1



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

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



Цитата(shuttle @  17.6.2009,  10:34 Найти цитируемый пост)
Очень кстати толковая книга. 

Это видно потому, что Вы спрашиваете. smile То есть конструкция есть, а зачем, где и как её пользовать =  нема. Очень толковая книга. smile  


--------------------
PM MAIL WWW GTalk Jabber   Вверх
zim22
Дата 17.6.2009, 12:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


depict1
****


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

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



Цитата(shuttle @  17.6.2009,  12:13 Найти цитируемый пост)
Как понимать следующее описание?

у меня оно вообще не компилится.
http://codepad.org/t9HY5Sqr

может быть имелся ввиду указетель на функцию?
Код

typedef int (*rifii) (int, int);

Цитата(shuttle @  17.6.2009,  12:34 Найти цитируемый пост)
это Страуструп написал

какая страница? какое издание книги?

Это сообщение отредактировал(а) zim22 - 17.6.2009, 13:17


--------------------
PM MAIL   Вверх
shuttle
Дата 17.6.2009, 13:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Бьерн Страуструп.
Язык программирования С++
Второе дополненное издание
Языки программирования / С++

там еще на обложке морская волна. страница 120. упражнение 2.

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


depict1
****


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

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



Цитата(shuttle @  17.6.2009,  13:09 Найти цитируемый пост)
Второе дополненное издание

у меня другая книжка smile не исключено, что у вас очепятка всего навсего.
"Специальное издание"
isbn 5-7989-0223-4
***
у меня на стр.120 вообще нет упражнений. 

Это сообщение отредактировал(а) zim22 - 17.6.2009, 13:20


--------------------
PM MAIL   Вверх
shuttle
Дата 17.6.2009, 13:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Все разобрался, сравнил с "Язык программирования С++ специальное издание", у меня точно опечатка 
должно быть так 
Код

typedef int (&rifii) (int, int);

а не 
Код

typedef int (rifii&) (int, int);


В "Язык программирования С++ специальное издание" это 206 страница.
--------------------
PM MAIL   Вверх
zim22
Дата 17.6.2009, 13:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


depict1
****


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

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



для чего это может пригодиться... для этого: smile
Код

typedef int (&rifii) (int, int);

int fcn(int,int) {return 5; }

int fcn2(rifii rf) { return 10; }
int main () {
  rifii r = fcn;
  r(10,20);

  fcn2(r);
}

***
плохой пример я привёл... исправляюсь
Код

typedef int (&rifii) (int, int);

int print(int i, int j) {
  cout << i << " " << j;
  return 0;
}
int formatted_print(int i, int j) {
  cout << "I: " << i << " J: " << j << endl;
  return 1;
}
void calculate(rifii r) {  
  r(10, 20);
}

int main () {
  calculate(print);
  calculate(formatted_print);
}


Это сообщение отредактировал(а) zim22 - 17.6.2009, 13:46


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


Кодофей
****


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

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



А в чем разница между указателем на функцию и ссылкой?


--------------------
Удалил аккаунт. Прощайте!
PM MAIL   Вверх
mes
Дата 17.6.2009, 13:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



Цитата(andrew_121 @  17.6.2009,  12:45 Найти цитируемый пост)
А в чем разница между указателем на функцию и ссылкой? 

в том, что ссылка должна быть изначально инициализирована.
 



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


depict1
****


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

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



Цитата(andrew_121 @  17.6.2009,  13:45 Найти цитируемый пост)
А в чем разница между указателем на функцию и ссылкой?

наверное в том же, в чём разница между передачей аргументов по указателю и ссылке smile


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


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


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

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



Цитата(zim22 @  17.6.2009,  12:47 Найти цитируемый пост)
наверное в том же, в чём разница между передачей аргументов по указателю и ссылке smile 

не совсем.. функция в отличии от объекта не может быть временной smile



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


Кодофей
****


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

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



Цитата(mes @  17.6.2009,  13:47 Найти цитируемый пост)
в том, что ссылка должна быть изначально инициализирована.

Походу, это единственный смысл.



Цитата(zim22 @  17.6.2009,  13:47 Найти цитируемый пост)
наверное в том же, в чём разница между передачей аргументов по указателю и ссылке

Это разные случаи.


--------------------
Удалил аккаунт. Прощайте!
PM MAIL   Вверх
mes
Дата 17.6.2009, 14:37 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



чего то захотелось вспомнить молодость и написать простой калькулятор, заодно демонстрация по теме :
Код

#include <iostream>

int plus  (int a, int b) { return a+b; }
int minus (int a, int b) { return a-b; }
int imul  (int a, int b) { return a*b; }
int idiv  (int a, int b) { return a/b; }

typedef int (&op_t) (int, int);

struct op_meta_t
{
    unsigned char key;
    std::string name;
    op_t operation;
};
op_meta_t op_meta_arr[] = { {'+', "plus", plus },
                            {'-', "minus", minus },
                            {'*', "imul", imul },
                            {'/', "idiv", idiv }
                          };
const unsigned op_meta_arr_size = sizeof (op_meta_arr)/ sizeof(*op_meta_arr);

void calculate (unsigned char key, int a1, int a2)
{
    for (unsigned i=0; i<op_meta_arr_size; ++i)
     if (op_meta_arr[i].key == key)
     {
         std::cout << a1 << " " << op_meta_arr[i].name << " " << a2 << " = " << op_meta_arr[i].operation(a1, a2)<<std::endl;
         return;
     }
   //-else-
     std::cout << "ERROR : operation not found"<< std::endl;
}

int main ()
{
    unsigned char op;
    std::cout << " operation :"; std::cin>>op;
    int a1, a2;
    std::cout << " argument 1 :"; std::cin>>a1;
    std::cout << " argument 2 :"; std::cin>>a2;

   calculate (op, a1, a2);

}




Это сообщение отредактировал(а) mes - 17.6.2009, 15:36


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

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

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

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

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


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

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


 




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


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

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