Учись программированию на C++ Builder бесплатно!
  • Главная

Всё для программирования C++ Builder

Шаблоны функций – создание и применение

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

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

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

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

Передача в функции нескольких параметров и управление макросами

Иногда в функции требуется передавать некоторое число фиксированных параметров плюс неопределенное число дополнительных параметров. В этом случае заголовок функции имеет вид:

тип имя_функции(список аргументов,...)

В данном случае список аргументов включает в себя конечное число обязательных аргументов (этот список не может быть пустым), после которого ставится многоточие на месте неопределенного числа параметров. Для работы с этими параметрами в файле stdarg.h определен тип списка va_list и три макроса: va_start, va_arg и va_end.

Параметры функции со значениями по умолчанию

Обычно при вызове функции в нее передается конкретное значение каждого параметра. Но программист может указать, что параметр является параметром по умолчанию, и приписать этому параметру значение по умолчанию. Делается это заданием в заголовке функции после имени параметра символа "=", после которого записывается значение по умолчанию. Пусть, например, нужно написать функцию, которая рассчитывает суммарную силу, действующую на тело объемом V с плотностью P, погруженное в жидкость (например, воду) с плотностью PH20. Как известно, формула, выражающая эту суммарную силу, направленную вверх (если ответ будет отрицательным, значит сила направлена вниз - тело тонет), следующая: F=GV(P-PH20), где G - ускорение свободного падения. Функцию, определяющую эту силу, можно описать следующим образом:

Применение в функции спецификации const при передаче параметров

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

double F(const &A);

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

Список параметров, передаваемый в функции, состоит из имен параметров и указаний на их тип. Например, в заголовке:

double FSum(double X1, double X2, int A)

указано три параметра X1, X2, А и определены их типы. Вызов такой процедуры может иметь вид:

Pr(Y, X2, 5);

Объявление и описание функций в C++ Builder

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

Классы памяти в C++ Builder

Каждая переменная характеризуется некоторым классом памяти, который определяет ее время жизни, в течение которого эта переменная существует в памяти. Одни переменные существуют недолго, другие неоднократно создаются и уничтожаются, третьи существуют на протяжении всего времени выполнения программы. В C++Builder имеется четыре спецификации класса памяти: auto, register, extern и static. Спецификация класса памяти идентификатора определяет erq класс памяти, область действия и пространство имен. Областью действия (областью видимости) идентификатора называется область программы, в которой на данную переменную (как, впрочем, и на любой идентификатор - константу, функцию и т.п.) можно сослаться. На некоторые переменные можно сослаться в любом месте программы, тогда как на другие только в определенных ее частях.

Поиск по сайту