Студопедия
Случайная страница | ТОМ-1 | ТОМ-2 | ТОМ-3
АрхитектураБиологияГеографияДругоеИностранные языки
ИнформатикаИсторияКультураЛитератураМатематика
МедицинаМеханикаОбразованиеОхрана трудаПедагогика
ПолитикаПравоПрограммированиеПсихологияРелигия
СоциологияСпортСтроительствоФизикаФилософия
ФинансыХимияЭкологияЭкономикаЭлектроника

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

Что такое перегрузка функций? | Шаблоны Функций | Использование шаблона функции | Шаблоны функций |


Читайте также:
  1. Ii) Указатели на элементы массива
  2. III. B. Функции слова ONE
  3. Other Functions of Money. Другие функции денег
  4. V) Массивы и функции
  5. Абстрактные базовые классы и чисто виртуальные функции
  6. Абстрактные базовые классы и чисто виртуальные функции.
  7. Аппроксимация 1s –функции электрона в атоме водорода двумя гауссовыми функциями

Лекция 6 – Еще о функциях (и о структуре программы). Шаблоны функций.

Содержание. Указатели на функции. Примеры использования указателей на функции. Массивы указателей на функции. Инициализация параметров функции, функции с параметрами по умолчанию, пример. Перегрузка функций. Использование перегруженных функций. Еще раз о структуре программы. Шаблоны функций. Использование шаблонов функций. Понятие инстанцирования шаблона. Замечание о параметризации функций и структурных типов, АТД. Явное задание аргументов шаблона при вызове, специализация шаблона функции (по Т.Павловской).

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

Теперь мы коснемся аспектов корректного использования функций, в частности, обсудим такие темы:

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

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

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

Замечание. Указатели на тип void.

àТип указателя void – это специальный тип указателя. void- указатели могут указывать на любой тип данных, от целочисленных до строки символов. Единственное ограничение, при этом, в том, что к такому указателю не может быть напрямую применена операция разыменования (*), поскольку размер единицы данных, на которые этот указатель ссылается, является неопределенным. По это причине, мы всегда должны использовать либо операции приведения типов, либо присваивание, для того, чтобы превратить наш void -указатель в указатель на конкретный тип данных.

Одним из применений таких указателей может быть передача в функцию, так называемых, обобщенных параметров, например:

// integer increaser#include <iostream.h> void increase (void* data, int type){ switch (type) { case sizeof(char): (*((char*)data))++; break; case sizeof(short): (*((short*)data))++; break; case sizeof(long): (*((long*)data))++; break; }}int main (){ char a = 5; short b = 9; long c = 12; increase (&a, sizeof(a)); increase (&b, sizeof(b)); increase (&c, sizeof(c)); cout << (int) a << ", " << b << ", " << c; return 0;}

Напомним, что sizeof – встроенная в C++ операция, которая дает в результате размер в байтах, занимаемый в памяти операндом того или иного типа.


Дата добавления: 2015-11-16; просмотров: 63 | Нарушение авторских прав


<== предыдущая страница | следующая страница ==>
Как это работает| Объявление указателей на функции

mybiblioteka.su - 2015-2024 год. (0.009 сек.)