Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Программирование.doc
Скачиваний:
10
Добавлен:
22.09.2019
Размер:
812.03 Кб
Скачать

13Указатели на функции

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

Тип_функции (*имя_указателя)(спецификация_параметра);

int(*funclptr)(char); - определение указателя funclptr на функцию с параметром типа char, возвращающую значение типа int.

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

void (*ptr1)(float)=f3;

Указатели на функцию могут быть объединены в массивы.

float (*ptrArray)(char)[4];

Для обращения к третей из этих функций потребуется оператор

float a=(*ptrArray[2])('f');

Для удобства последующих применений и сокращения производных описаний рекомендуется с помощью спецификатора typedef вводить имя типа указателя на функцию: typedef float (*ptf)(float); Массив указателей на функции удобно использовать при разработке всевозможных меню.

#include <stdlib.h>

#include <iostream.h>

void act1(char*name)

{cout << "Действия по созданию файла " << name;}

void act2(char*name)

{cout << "Действие по удалению файла " << name;}

void act3(char*name)

{cout << "Действие по чтению файла " << name;}

void act4(char*name)

{cout << "Действие по модификации файла " << name;}

void act5(char*name)

{cout << "Действие по закрытию файла " ;

exit(0);

}

typedef void(*menu)(char*);

menu MenuAct[5]={act1,act2,act3,act4,act5};

void main()

{int number;

char FileName[30];

cout << "\n 1 - создание файла";

cout << "\n 2 - уничтожение файла";

cout << "\n 3 - чтение файла";

cout << "\n 4 - модификация файла";

cout << "\n 5 - выход из программы";

while(1)

{while(1)

{cout << "\n\n Введите номер пункта меню: ";

cin >> number;

if(number>=1 && number<=5) break;

cout << "\n Ошибка в номере пункта меню!";

}

if (number!=5)

{cout << "Введите имя файла";

cin >> FileName;

}

(*MenuAct[number-1])(FileName);

}

}

14Файлы в Си/СИ++

При решении многих задач возникает проблема хранения и обработки достаточно большого объема данных. В таких случаях широко используют внешние устройства для записи и чтения информации. Связь с внешними источниками, приемниками и носителями информации в С++ осуществляется только с помощью файлов.

Традиционно под файлом понимается поименованная совокупность данных на внешнем носителе, однако в С++ этот термин трактуется более широко. Файлом здесь считается также любое внешнее устройство, по своему назначению являющееся источником или приемником информации, например, клавиатура, принтер, диск и т.д. Такое устройство принято называть логическим, поскольку учитывается только его главная функция, а не физические характеристики.

До начала операции ввода-вывода конкретному внешнему файлу должна быть поставлена в соответствие специальная переменная в программе.