C++.Бархатный путь




Тип функции


Основными характеристиками функции является тип возвращаемого значения и список типов формальных параметров. Подобно тому, как имена переменных никаким образом не влияют на их тип, имена функций не является частью их типа. Тип функции определяется типом возвращаемого значения и списком типов её формальных параметров. Например, пара функций char MyF1 (int, int, int*, float); char MyNew (int MyP1, int MyP2, int* MyP3, float MyP3);

имеют один и тот же тип: char (int, int, int*, float)

Подобную конструкцию мы назовём описанием типа функции.

А вот как выглядит описание типа функции, которая возвращает указатель на объект типа char: char * (int, int, int*, float)

Описанию этого типа соответствует, например, функция char *MyFp (int MyP1, int MyP2, int* MyP3, float MyP3);

Комбинируя знак ptr-операции * с именем функции мы получаем новую языковую конструкцию: char (*MyPt1) (int MyP1, int MyP2, int* MyP3, float MyP3);

Это уже не объявление функции. Это определение указателя на функцию! Это объект со следующими характеристиками:

  • его имя MyPt1,
  • это указатель на функцию,
  • эта функция должна возвращать значения типа char,
  • список её формальных параметров имеет вид (int,int,int*, float).

Так что это должны быть функции со строго определёнными характеристиками. В нашем случае - это функции типа char (int, int, int*, float)

Описание типа указателя на функцию, возвращающую указатель на объект типа char с параметрами (int, int, int*, float) char * (int, int, int*, float)

отличается от описания типа этой функции дополнительным элементом (*): char * (*) (int, int, int*, float).

Пример определения подобного указателя: char* (*MyPt2) (int MyP1, int MyP2, int* MyP3, float MyP3);

И опять новый объект:

  • его имя MyPt2,
  • это указатель на функцию,
  • эта функция должна возвращать указатель на объекты типа char,
  • список её формальных параметров имеет вид (int,int,int*, float).

Также можно определить функцию, которая будет возвращать указатель на объект типа void (то есть просто указатель). Это совсем просто: void * (int)




Содержание  Назад  Вперед