---
description: расширяемый код
---

# Указатель на функцию

{% hint style="info" %}
<mark style="color:blue;">**Указатели на функцию**</mark> - упрощают код и делают его расширяемым.  Вместо того, что бы менять логику выбора функции которую мы хотим использовать, мы просто можем сразу её передать, это оптимизирует код иначе пришлось бы писать большое количество [if-else ](if-else)или [switch](switch).&#x20;
{% endhint %}

```cpp
// тип данных ( *имя указателя )( параметры )


void (*pointer_function)(int a);  // объявление указателя на функцию

pointer_function = fuction; // инициализация, присвоение
```





Указатели на функции значительно упрощают код. Без них пришлось бы писать костыли и трудную логику из [if](if-else)'ов

{% code title="условный код" %}
```cpp
#include <string>

string Get_User_Profile()                  
{
    return "user profile";
}

string Get_User_Friends()                
{
    return "user friends";
}



void ShowInfo(string (*Chosen_Function)() ) // получаем в качестве параметра функцию
{

    cout << Chosen_Function() << endl;   // вызываем выбраную функцию

}



int main()
{

    ShowInfo(Get_User_Profile);  // указываем функцию которую хотим увидеть

}
```
{% endcode %}

Функция <mark style="color:blue;">`ShowInfo`</mark> выводит нам информацию в соответствии от того, что мы хотим получить. \
В данном примере это функции выводят текст, а в реальных проектах это могут быть записи из базы данных.

