Здавалка
Главная | Обратная связь

Массивы указателей на функции.



Указатели на функции могут быть объединены в массивы. Например, float (*ptrArray[4]) (char) ; - описание массива с именем ptrArray из четырех указателей на функции, каждая из которых имеет параметр типа char и возвращает значение типа float. Чтобы обратиться, например, к третьей из этих функций, потребуется такой оператор:

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

Как обычно, индексация массива начинается с 0, и поэтому третий элемент массива имеет индекс 2.

Массивы указателей на функции удобно использовать при разработке всевозможных меню, точнее программ, управление которыми выполняется с помощью меню. Для этого действия, предлагаемые на выбор будущему пользователю программы, оформляются в виде функций, адреса которых помещаются в массив указателей на функции. Пользователю предлагается выбрать из меню нужный ему пункт (в простейшем случае он вводит номер выбираемого пункта) и по номеру пункта, как по индексу, из массива выбирается соответствующий адрес функции. Обращение к функции по этому адресу обеспечивает выполнение требуемых действий. Самую общую схему реализации такого подхода иллюстрирует следующая программа для "обработки файлов":

#include <iostream> using namespace std; /* Определение функций для обработки меню(функции фиктивны т. е. реальных действий не выполняют):*/ void act1 (char* name){ cout <<"Create file..." << name; } void act2 (char* name){ cout << "Delete file... " << name; }void act3 (char* name){ cout << "Read file... " << name; } void act4 (char* name){ cout << "Mode file... " << name; } void act5 (char* name) { cout << "Close file... " << name; } void main(){ // Создание и инициализация массива указателей void (*MenuAct[5])(char*) = {act1, act2, act3, act4, act5}; int number; // Номер выбранного пункта меню. char FileName[30]; // Строка для имени файла. // Реализация меню cout << "\n 1 - Create"; cout << "\n 2 - Delete"; cout << "\n 3 - Read"; cout << "\n 4 - Mode"; cout << "\n 5 - Close"; while (1) // Бесконечный цикл. { while (1) { // Цикл продолжается до ввода правильного номера. cout << "\n\nSelect action: "; cin >> number; if (number>= 1 && number <= 5) break; cout << "\nError number!"; } if (number != 5) { cout << "Enter file name: "; cin >> FileName; // Читать имя файла. } else break; // Вызов функции по указателю на нее: (*MenuAct[number-1])(FileName); } // Конец бесконечного цикла.}

Пункты меню повторяются, пока не будет введен номер 5 - закрытие.

Предыдущая Оглавление Следующая  
Предыдущая Оглавление Следующая
           

Домашнее задание

1. Написать программу, которая осуществляет добавление строки или столбца в любое место двумерной матрицы по выбору пользователя.

2. Дана матрица порядка MxN (M строк, N столбцов). Необходимо заполнить ее значениями и написать функцию, осуществляющую циклический сдвиг строк и/или столбцов массива указанное количество раз и в указанную сторону.

Предыдущая Оглавление Следующая

 


 

Предыдущая Оглавление Следующая

Урок №16.

  • Структура. Определение структур.
  • Действия над структурами.
  • Оператор sizeof.
  • Домашнее задание
Предыдущая Оглавление Следующая  
Предыдущая Оглавление Следующая
           






©2015 arhivinfo.ru Все права принадлежат авторам размещенных материалов.