Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 10, средняя оценка - 5.00
soundtrack
42 / 42 / 4
Регистрация: 15.12.2011
Сообщений: 131
#1

Функция без параметров? - C++

26.04.2012, 16:45. Просмотров 1321. Ответов 9
Метки нет (Все метки)

Начал разбираться с библиотекой alglib для решения интеграла сложной функции. В документации нашел такой код, но не могу разобраться с одним моментом.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
#include "stdafx.h"
#include <stdlib.h>
#include <stdio.h>
#include <math.h>
#include "integration.h"
 
using namespace alglib;
void int_function_1_func(double x, double xminusa, double bminusx, double &y, void *ptr) 
{
    // this callback calculates f(x)=exp(x)
    y = exp(x);
}
 
int main(int argc, char **argv)
{
    //
    // This example demonstrates integration of f=exp(x) on [0,1]:
    // * first, autogkstate is initialized
    // * then we call integration function
    // * and finally we obtain results with autogkresults() call
    //
    double a = 0;
    double b = 1;
    autogkstate s;
    double v;
    autogkreport rep;
 
    autogksmooth(a, b, s);
    alglib::autogkintegrate(s, int_function_1_func);
    autogkresults(s, v, rep);
 
    printf("%.2f\n", double(v)); // EXPECTED: 1.7182
    return 0;
}
Собственно, объявлена функция int_function_1_func, у неё есть параметры, но потом каким-то образом она используется по одному только имени без каких-либо параметров
C++
1
alglib::autogkintegrate(s, int_function_1_func);
Расскажите, это какой-то метод С++, о котором я не знаю, и как такое работает. Заранее спасибо
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
26.04.2012, 16:45
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Функция без параметров? (C++):

Функция с переменным числом параметров, как узнать кличество переданных параметров? - C++
Добрый вечер, можно не использовать int n, а каким то другим способом узнать количество переданных аргументов в функцию и адрес? int suma...

Функция с переменным числом параметров находящая максимальный элемент в списке параметров - C++
Написать функцию с переменным числом параметров:Максимальный из элементов в списке параметров, стоящих на нечетных местах....

Функция возвращающая абсолютное разницу первого и второго параметров и функция типа int, возвращающая минимальное из трех целых чисел - C++
Разработать заданные согласно условия функции и сделать в главной программе по два вызова этих функций с различными параметрами. Для...

Передача параметров (функция) - C++
Помогите,пожалуйста написать (ДОПИСАТЬ) программу на C++. Создать функцию, которая принимает на вход дат рождения и текущую дату...

Конструкторы с и без параметров - C++
Здравствуйте, Не могу понять где ошибка, на экран выводит мусор, а нужно бы нормальные человеческие числа.. #include &lt;iostream&gt; ...

Конструктор без параметров - C++
class stack { private: int top; // вершина стека int s; // массив в котором хранится стек public: stack (): top(0)...

9
panicwassano
592 / 560 / 20
Регистрация: 07.11.2010
Сообщений: 2,004
26.04.2012, 16:49 #2
Цитата Сообщение от soundtrack Посмотреть сообщение
Расскажите, это какой-то метод С++, о котором я не знаю, и как такое работает. Заранее спасибо
называется указатель на функцию
1
soundtrack
42 / 42 / 4
Регистрация: 15.12.2011
Сообщений: 131
26.04.2012, 16:56  [ТС] #3
Цитата Сообщение от panicwassano Посмотреть сообщение
называется указатель на функцию
ну указатель специфицируется символом "*", или с функциями это работает не так? И в чём смысл данной операции? Какие параметры передаются функции?
0
Somebody
2789 / 1600 / 145
Регистрация: 03.12.2007
Сообщений: 4,193
Завершенные тесты: 1
26.04.2012, 17:54 #4
Можно и &int_function_1_func. Стандартное преобразование:
An lvalue of function type T can be converted to a prvalue of type “pointer to T.” The result is a pointer to the function.
0
soundtrack
42 / 42 / 4
Регистрация: 15.12.2011
Сообщений: 131
26.04.2012, 22:06  [ТС] #5
Спасибо) теперь хоть знаю в каком направлении читать...а то первый раз если честно с таким понятием встретился.
0
taras atavin
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
27.04.2012, 10:50 #6
Цитата Сообщение от soundtrack Посмотреть сообщение
Собственно, объявлена функция int_function_1_func, у неё есть параметры, но потом каким-то образом она используется по одному только имени без каких-либо параметров
Адрес точки входа в любую функцию параметров не имеет, а
Цитата Сообщение от soundtrack Посмотреть сообщение
alglib::autogkintegrate(s, int_function_1_func);
означает передачу в другую функцию именно адреса точки входа. Параметры же потом будет формировать другая функция и вызывать функцию int_function_1_func с этими параметрами, вызывая её по адресу, а не по имени.

Добавлено через 3 минуты
Цитата Сообщение от soundtrack Посмотреть сообщение
ну указатель специфицируется символом "*",
Имя функции - уже указатель, а его значение - адрес точки входа в саму функцию. При вызове по адресу используется только значение этого указателя без идентификатора. Поэтому "&" не используется. Кстати, это вызов, а не декларация, значит "*" - разыменование, то есть сам объект по указателю, а указатель по объекту - "&".
1
soundtrack
42 / 42 / 4
Регистрация: 15.12.2011
Сообщений: 131
27.04.2012, 15:45  [ТС] #7
taras atavin, спасибо, вроде немного разобрался. Ну а как быть если мне нужно эти функции забросить внутрь класса как методы? В таком случае на такой код:
C++
1
alglib::autogkintegrate(s, int_function_1_func);
компилятор ругается словами:
error C3867: sloi::int_function_1_func: в вызове функции отсутствует список аргументов; используйте "&sloi::int_function_1_func" для создания указателя на член,
а если создавать указатель, как он и советует:
C++
1
alglib::autogkintegrate(s, &sloi::int_function_1_func);
то ругается вот так:
error C2664: alglib::autogkintegrate: невозможно преобразовать параметр 2 из "void (__thiscall sloi::* )(double,double,double,double &,void *)" в "void (__cdecl *)(double,double,double,double &,void *)"
Сложно с этими указателями на функции...
0
gray_fox
What a waste!
1521 / 1226 / 70
Регистрация: 21.04.2012
Сообщений: 2,565
Завершенные тесты: 3
27.04.2012, 20:55 #8
Цитата Сообщение от soundtrack Посмотреть сообщение
: невозможно преобразовать параметр 2 из "void (__thiscall sloi::* )(double,double,double,double &,void *)" в "void (__cdecl *)(double,double,double,double &,void *)"
Передаёте указатель на метод класса, а ожидается - указатель на функцию.
0
soundtrack
42 / 42 / 4
Регистрация: 15.12.2011
Сообщений: 131
27.04.2012, 21:10  [ТС] #9
gray_fox, если не сложно, напишите как нужно тогда реализовать правильно?
0
gray_fox
What a waste!
1521 / 1226 / 70
Регистрация: 21.04.2012
Сообщений: 2,565
Завершенные тесты: 3
27.04.2012, 21:19 #10
Цитата Сообщение от soundtrack Посмотреть сообщение
int_function_1_func
должна быть обычной функцией (как в первом сообщении) или статическим методом класса. Метод класса и функция имеют разные типы, ведь метод класса вызывается всегда для объекта этого класса.
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
27.04.2012, 21:19
Привет! Вот еще темы с ответами:

Функция со сменным числом параметров - C++
Нужно написать программу на С в которой будет функция у какую передаются масивы целых чисел. Элементы с номерами 0,2,4 и т.д. сортовать...

В функция с переменным числом параметров. - C++
В функцию с переменным числом параметров поступают слова, конец списка - указатель NULL. Найти и вывести все слова, которые читаются...

Функция с переменным числом параметров - C++
Написать функцию с переменным числом параметров, которая определяет количество чисел, являющихся точными квадратами (2, 4, 9, 16,. . . )...

Функция с переменным числом параметров - C++
Написать функцию sum с переменным числом параметров, которая находит сумму заданных обыкновенных дробей. Написать вызывающую функцию main,...


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

Или воспользуйтесь поиском по форуму:
10
Yandex
Объявления
27.04.2012, 21:19
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru