Студопедия

КАТЕГОРИИ:

АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника



Параметр функции. Указатель на функцию.




Читайте также:
  1. D – технология параметрического моделирования .
  2. Абсолютные и относительные параметры дохода. Источники информации о доходах и расходах населения.
  3. АЛФАВИТНЫЙ УКАЗАТЕЛЬ ПРЕПАРАТОВ
  4. Амплітуда і фаза вимушених коливань (механічних і електромагнітних). Резонанс. Резонансні криві. Параметричний резонанс
  5. Артерии, морфофункциональная характеристика. Классификация, развитие, строение, функции. Взаимосвязь структуры артерий и гемодинамических условий. Возрастные изменения.
  6. Асимптоты графика функции.
  7. Б) Определение параметров кавальеров минерального грунта.
  8. Белое вещество спинного мозга: строение и функции.
  9. Бесконечно малые функции. Арифметические действия с бесконечно малыми (доказательство)
  10. БИОГРАФИЧЕСКИЙ УКАЗАТЕЛЬ

Для передачи функции в функцию пользователя необходимо уметь:

1) объявить параметр – указатель на функцию

2) внутри функции, опираясь на указатель, вызвать переданную функцию при переданном аргументе

3) вызывая функцию, передать адрес конкретной функции для соответствующего аргумента

 

Как объявить указатель на функцию?

void (*f1)(void); // объявлена переменная f1 – указатель на тип void, не имеющую параметров.

int (*f2)(int, double); // объявлена переменная f2 – указатель на тип int, имеющая два параметра: на тип int и double

double (*f)(double); // объявлена переменная f – указатель на тип double, имеет один параметр типа double

 

Отсюда видно, что при объявлении указателя на функцию важны характеристики функции: тип функции, количество и порядок следования параметров.

 

Как поместить в указатель конкретное значение?

В указатель на функцию можно поместить адрес конкретной функции с соответствующими характеристиками.

double (*f)(double);

double sin(double);

f=sin;

Имя конкретной функции – ее адрес.

 

Как вызвать функцию, опираясь на адрес?

double rez=f(M_PI/2);

 

Написать функцию вычисления интеграла

 

Integral

double (*f)(double);

double a, double b

int n

 

#include<iostream>

using namespace std;

double Integral(double (*f)(double) … ?

{

int i;

double h=(b-a)/n, integ=0;

for (i=0; i<n, i++)

integ+=f(a+i*h);

return h*integ;

}

 

double func(double x)

{

return x*x-1;

}

 

#include <math.h>

int main(void)

{

double rez;

rez=Integral(sin,0,3.14,10000);

cout<<rez<<endl;

rez=Integral(func,0,2,10000);

cout<<rez<<endl;

return 0;

}


+

41. Перегрузка функций.

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

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

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

Вызов функции должен быть однозначным.

Неоднозначность может возникнуть при:



1. Преобразовании типа

2. Использовании параметров ссылок

3. Использовании параметров по умолчанию

 

1.

float f(float a);

double f(double a);

 

int main (void)

{

int a =...;

float b =...;

double c =...;

f (b);

f (c);

f (a); // неоднозначность. возникнет ошибка компиляции

f ((double)a); // таким образом можно устранить неоднозначность

return 0;

}

 

2.

 

void f1(int a);

void f1(int&a);

 

int main (void)

{

int a =...;

f1(a); // неоднозначность

return 0;

}

 

3.

 

void f2 (int a);

int f2 (int a, int b=3);

 

int main (void)

{

int a =...;

f2(a); // неоднозначность

return 0;

}


Дата добавления: 2015-01-29; просмотров: 9; Нарушение авторских прав







lektsii.com - Лекции.Ком - 2014-2021 год. (0.013 сек.) Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав
Главная страница Случайная страница Контакты