Uploaded by YAegor06

Указатель на функцию в качестве параметра

advertisement
Указатель на функцию в качестве параметра.
Передача функции в качестве параметра. С++ Урок
#65
Указатель на функцию - это переменная хранящая ссылку на функцию (переменная в которую
мы можем поместить функцию) .
Тип функции(*имя указателя)(спецификация параметров) ; Синтаксис указателя на функцию.
void foo1()
{
cout << "void foo 1()" << endl; Функция не принимает никаких
параметров.
}
void foo2()
{
cout << "void foo 2()" << endl;
}
void main()
{
void(*fooPointer)(); - указатель на функцию. Так как функция не
принимает никаких параметров,
в указатель мы ничего не передаём.
fooPointer = foo1; присваиваем указателю функцию,
на которую он будет указывать.
}
#include <iostream>
#include <string>
using namespace std;
int foo1(int a) - Теперь функция принимает значение и имеет тип int.
{
return a - 1;
}
int foo2(int a) - Теперь функция принимает значение и имеет тип int.
{
{
return a * 2;
}
void main()
{
int(*fooPointer)(int a ); - тип указателя должен совпадать с типом
функции, на которую он указывает.
fooPointer = foo1;
cout << fooPointer(5) << endl;
}
#include <iostream>
#include <string>
using namespace std;
string GetDataFromBD()
{
return "Data From BD";
}
string GetDataFromWebServer()
{
return "Data From WebServer";
}
void SowInfo(string (*foo)())
{
cout << foo() << endl;
}
void main()
{
SowInfo(GetDataFromBD);
}
Препроцессор что это. Директива #define.
Макросы. Директивы препроцессора что это. C
++ Урок #66
#include <iostream>
#define PI 3.14 обозначаем PI и присваиваем какое то значение
#define tab "\t"
#include <string>
using namespace std;
Компилятор присвоит значения которые мы выставили до компиляции программы везде где есть
наши обозначения.
void main()
{
cout << PI << endl; В данном случае терминал выведет ( 3.14)
cout << "text" << tab << "text" << endl; Здесь выведется ( text text)
}
Так же нужно помнить что мы можем назначить слова, в которые уже записаны какие то функции, в
таком случае воспользоваться этими функциями мы не сможем.
Прим #define begin { Теперь компилятор будет расценивать все слова begin как {, и функцией с таким
именем мы обратиться уже не сможем.
c++ макрос функция. Макросы с аргументами.
Макрос с параметрами. C ++ Для начинающих.
Урок #67
#include <iostream>
#define FOO(x,y)((x)*(y)) Имя функции, прин. параметры, логика функции.
#include <string>
using namespace std;
void main()
{
cout << FOO(5, 6) << endl;
}
Условная
компиляция. #ifdef #else #endif #if #elif #endif #
ifndef что это. C ++ Урок #68
#include <iostream>
using namespace std;
//#define DEBUG Мы закомментировали эту строчку, в следствии чего области
выделенные #ifdef #endif не будут видны компилятором.
void main()
{
setlocale(LC_ALL, "ru");
#ifdef DEBUG
cout << "начало цикла" << endl;
#endif // DEBUG
for (int i = 0; i < 4; i++)
{
cout << i << endl;
}
#ifdef DEBUG
cout << "конец цикла" << endl;
#endif // DEBUG
}
У #define так же как и у if есть конструкция else.
#include <iostream>
using namespace std;
#define DEBUG
void main()
{
setlocale(LC_ALL, "ru");
#ifdef DEBUG
cout << "Дебаг определён" << endl;
#else
cout << "Дебаг не определён" << endl;
#endif
Так же мы можем работать с конструкцией #if без частицы def.
В таком случае нам нужно обозначить #ifdef записать название (DEBUG)
в #if и обозначить условие при выполнении или невыполнении которого будет срабатывать #if.
(#define DEBUG 5).
#include <iostream>
using namespace std;
#define DEBUG 5 Присваиваем значение
void main()
{
setlocale(LC_ALL, "ru");
#if DEBUG > 4 Если условие соблюдено ( 5 > 4 ) if сработает и выведет "Дебаг определён" .
cout << "Дебаг определён" << endl;
#else
cout << "Дебаг не определён" << endl;
#endif // DEBUG
}
Условный тернарный оператор что это. Как
работает. Как использовать. C ++ Для
начинающих. Урок #69
Download