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

48. Объявление функции

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

[спецификатор-класса памяти][спецификатор-типа]

описатель ([список формальных параметров])[,список описателей];

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

Прототип функции нужно задавать в следующих случаях:

• функция возвращает значение типа, отличного от int

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

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

Если прототип задан с классом памяти static, в определении функции также должен быть задан спецификатор класса памяти static. Если задан спецификатор класса памяти extern или спецификатор опущен, то функция имеет класс памяти extern.

Вставляемые (inline) функции

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

struct dat

{ int day,month,year;

void Setdat(char *p) // Функция inline по умолчанию

{ ... } // Тело функции

50. Преобразование основных типов.

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

1. Операнды типа float преобразуются к типу double

2. Если один из операндов типа long double, то другой преобразуется к типу long double

3. Если один из операндов типа double, то другой преобразуется к типу double

4. Любые операнды типа char или short преобразуются к типу int.

5. Любые операнды типа unsigned char или unsigned short преобразуются к типу unsigned int

6. Если один из операндов типа unsigned long, то другой преобразуется к типу unsigned long

7. Если один из операндов типа long, то другой преобразуется к типу long

8. Если один из операндов типа unsigned int, то другой преобразуется к типу unsigned int

Таким образом, при вычислении выражений операнды преобразуются к типу того операнда, который имеет наибольший размер.

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

() Операция преобразования (или приведения) типа.

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

Синтаксис приведения типов следующий:

Type_cast(выражение):

(type_cast)выражение;