Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.60/15: Рейтинг темы: голосов - 15, средняя оценка - 4.60
0 / 0 / 0
Регистрация: 16.09.2018
Сообщений: 24

Нюансы синтаксиса: объяснить использование ключевого слова typedef в заданном фрагменте кода

14.10.2018, 16:19. Показов 3091. Ответов 15

Студворк — интернет-сервис помощи студентам
Всем привет. Недавно на просторах интернета столкнулся с таким кодом:
C++
1
2
3
4
5
6
7
8
9
typedef double(*pointFunc)(double);
double f(double x)
{
    return 3*x*x;
}
double simpson(pointFunc f,double a,double b,int n)
{
....
}
Не понятна 1 строчка(c typedef). Как я понял это один из способов, чтобы в аргументе функции задать другую функцию. Был бы благодарен , если бы кто то обьяснил это. И также интересно какие еще есть способы для этого?
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
14.10.2018, 16:19
Ответы с готовыми решениями:

Нюансы синтаксиса: объяснить как работает тернарная операция в заданном фрагменте кода
Всем доброго времени суток! Помогите разобраться с кодом. const char x = {"Jason ", "at your service\n"}; const char * y =...

Нюансы работы с указателями: объяснить, что происходит в заданном фрагменте кода
Всем доброго времени суток! Я не до конца разобрался в данной теме. К примеру, есть такой кусок программы: ... int N; int...

Нюансы синтаксиса: использование typedef
typedef int(*compare_func)(void* left, void* right); В первых круглых скобках - "*compare_func" новое имя типа, представляющее указатель...

15
505 / 317 / 236
Регистрация: 18.02.2013
Сообщений: 754
14.10.2018, 16:42
typedef - декларация пользовательского типа, в Вашем случае декларируется тип с именем pointFunc, который является указателем на функцию, принимающую на вход вещественное число и возвращающую точно такой же тип
1
0 / 0 / 0
Регистрация: 16.09.2018
Сообщений: 24
14.10.2018, 16:59  [ТС]
То есть сразу после typedef указывается тип возвращаемого значения, а после *pointFunc тип принимаего аргумента? Или же наоборот?
0
505 / 317 / 236
Регистрация: 18.02.2013
Сообщений: 754
14.10.2018, 17:01
Цитата Сообщение от makcimmushka Посмотреть сообщение
сразу после typedef указывается
декларируемый тип)
1
19500 / 10105 / 2461
Регистрация: 30.01.2014
Сообщений: 17,816
14.10.2018, 17:52
makcimmushka, можно писать так:
C++
1
using pointFunc = double(*)(double);
будет одно и то же c typedef. Только вам, как новичку, понятнее.
1
0 / 0 / 0
Регистрация: 16.09.2018
Сообщений: 24
14.10.2018, 18:10  [ТС]
А то что в параметрах функции не только параметры типа дабл? Это ничего? Если параметры функции разных типов, то какой тогда в скобках указывать? Первый?
0
19500 / 10105 / 2461
Регистрация: 30.01.2014
Сообщений: 17,816
14.10.2018, 18:14
Цитата Сообщение от makcimmushka Посмотреть сообщение
А то что в параметрах функции не только параметры типа дабл? Это ничего? Если параметры функции разных типов, то какой тогда в скобках указывать? Первый?
Может нужно начать с того, что разобраться что именно мы программируем? И тогда и ответ на ваш вопрос сам по себе найдется. Это же метод Симпсона, а первым параметром передается интегрируемая функция. Вот и смотрите, что туда надо передать, чтобы это работало.
0
 Аватар для Kuzia domovenok
4268 / 3327 / 926
Регистрация: 25.03.2012
Сообщений: 12,532
Записей в блоге: 1
14.10.2018, 18:36
DrOffset, нихрена себе понятнее, что это за скобки без ничего и не перед чем?
Тайпдев полностью аналогичен объявлению переменной искомого типа, а юзинг изобретает какой-то неинтуитивный синтаксис.
0
19500 / 10105 / 2461
Регистрация: 30.01.2014
Сообщений: 17,816
14.10.2018, 18:42
Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
нихрена себе понятнее, что это за скобки без ничего и не перед чем?
Тогда я тебе предлагаю объяснить ТСу общий синтаксис записи типов в С\С++. В частности почему в одних случаях имя типа пишется перед, а в других в середине декларации. И как вообще такую запись правильно читать. Дерзай
0
 Аватар для Kuzia domovenok
4268 / 3327 / 926
Регистрация: 25.03.2012
Сообщений: 12,532
Записей в блоге: 1
14.10.2018, 18:46
Цитата Сообщение от DrOffset Посмотреть сообщение
Тогда я тебе предлагаю объяснить ТСу общий синтаксис записи типов в С\С++. В частности почему в одних случаях имя типа пишется перед, а в других в середине декларации. И как вообще такую запись правильно читать. Дерзай
оно пишется ровно там, где бы писалось при объявлении переменной этого типа. При объявлении простых типов пишется спереди, Объявление указателей на функции там же, где и 40 лет назад. С восьмидесятых годов ты пишешь указатели на функции в определённом порядке
int (*foo)(int a, int b);
а не
int(*)(int, int) foo;
новичка ошеломит такая резкая перемена от того, к чему он 40 лет привык писать
0
19500 / 10105 / 2461
Регистрация: 30.01.2014
Сообщений: 17,816
14.10.2018, 18:50
Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
новичка ошеломит такая резкая перемена от того, к чему он 40 лет привык писать
Что-то не сходится.

Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
int (*foo)(int a, int b);
а не
int(*)(int, int) foo;
С точки зрения конечного результата, ты как раз и пишешь вместо
int (*foo)(int a, int b);
просто
pointFunc foo;
0
901 / 478 / 93
Регистрация: 10.06.2014
Сообщений: 2,700
14.10.2018, 18:50
Kuzia domovenok,
Наверное using все же удобнее. В случае с typedef приходится помнить какой тип должен идти первым, алиас или оригинал.
Кроме того using гибче т.к с ним еще можно использовать шаблоны.
А объявление выше такое же как если был использован typedef, только название типа написано не после звездочки...
0
 Аватар для Kuzia domovenok
4268 / 3327 / 926
Регистрация: 25.03.2012
Сообщений: 12,532
Записей в блоге: 1
14.10.2018, 18:56
а какая раница. Вот в том что запрещено писать
int(*)(int, int) foo;
логика есть, т.к это бредовый синтаксис
а pointFunc foo; можно писать как любое объявление

Добавлено через 2 минуты
Цитата Сообщение от Undisputed Посмотреть сообщение
typedef приходится помнить какой тип должен идти первым, алиас или оригинал.
не нужно, в случае обсуждаемых функций, там вообще ни алиас и не совсем оригинал идёт первым.
И в общем случае: Не нужно это помнить, потому что правило гласит "объявляй алиас, словно это переменная". Зачем запоминать конкретный порядок, если есть правило.
0
19500 / 10105 / 2461
Регистрация: 30.01.2014
Сообщений: 17,816
14.10.2018, 18:57
Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
а pointFunc foo; можно писать как любое объявление
Я тебе предлагаю объяснить человеку как строится это "любое объявление". Судя по его вопросам - он не понимает.
Чего ты со мной-то споришь? Считаешь, что это понятнее - объясни ему.
0
901 / 478 / 93
Регистрация: 10.06.2014
Сообщений: 2,700
14.10.2018, 19:00
Kuzia domovenok,
Ну так в случае с using это как раз выглядит как определение переменной...
using type = int; т.е название = значение
Вполне легко читается
0
 Аватар для Kuzia domovenok
4268 / 3327 / 926
Регистрация: 25.03.2012
Сообщений: 12,532
Записей в блоге: 1
14.10.2018, 19:22
через = никаких переменных не объявляют.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
14.10.2018, 19:22
Помогаю со студенческими работами здесь

Нюансы синтаксиса: объяснить, что происходит в заданных участках кода
mas_tops=new node *; // что это строка значит? и зачем она нужна create_massiv_of_lists(node** x,int l) // зачем тут двойной указатель ...

Нюансы синтаксиса: объяснить что происходит в заданных строках кода
Разбираюсь со структурами. Подскажите, пожалуйста, что означает с 3 по 7 строку? Для чего так делается? struct node { ...

Объяснить, что происходит в заданном фрагменте кода
ifstream f("Базаданных.bd", ios::binary); f.read((char*)&P,sizeof(P)); do { ...

Объяснить, что происходит в заданном фрагменте кода
В подпрограмме Всё предельно ясно кроме одной строки - P.year=y-'0'; Объясните недалёкому что происходит в строке { ...

Списки: объяснить, что происходит в заданном фрагменте кода
Помогите разобраться в коде, вот код с# public class Node { public string Data { get; set; } public Node...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
16
Ответ Создать тему
Новые блоги и статьи
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Символьное дифференцирование
igorrr37 13.02.2026
/ * Программа принимает математическое выражение в виде строки и выдаёт его производную в виде строки и вычисляет значение производной при заданном х Логарифм записывается как: (x-2)log(x^2+2) -. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru