Указатель на функцию в качестве параметра. Передача функции в качестве параметра. С++ Урок #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