Главная

Категории:

ДомЗдоровьеЗоологияИнформатикаИскусствоИскусствоКомпьютерыКулинарияМаркетингМатематикаМедицинаМенеджментОбразованиеПедагогикаПитомцыПрограммированиеПроизводствоПромышленностьПсихологияРазноеРелигияСоциологияСпортСтатистикаТранспортФизикаФилософияФинансыХимияХоббиЭкологияЭкономикаЭлектроника






Struct A // объявление структуры A


{

int k;

double x;

};

Struct B // объявление структуры B

{

A s; // s – поле структуры B, по типу – структура типа A

double y;

};

B mas[2]; // массив структур

// способ обращения к полям структуры

mas[0].s.k = 1;

mas[1].y = 1.21;

Контрольные вопросы. А.

Функции, определяемые пользователем

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

Любая программа на С++ состоит из функций, одна из которых обязательно называется main. Функции в С++ - это аналог процедур в Pascal или подпрограмм в FORTRAN. Если рассматривать программу большого объема как сложную систему, то функция – это реализация принципа модульности, который помогает повысить надежность системы. Модуль представляет собой логически завершенную часть программы, ????? Модуль следует рассматривать как некий «черный ящик»: информация на входе – информация на выходе. Таким образом, пользователь может не знать устройства модуля, но успешно им пользоваться. Соответственно, разные по внутреннему устройству модули могут выполнять одинаковые действия, следовательно, такие модули будут взаимозаменяемы. Такой подход позволяет упростить процесс разработки и отладки программы, а также дает возможность использовать модули, разработанные другими программистами.

Объявление и определение функции

Как уже упоминалось в разделе 1.6, функция может принимать параметры и возвращать значения. Функция должна быть объявлена и определена. В объявлении функции (или прототипе) указывается

- тип возвращаемого значения,

- имя функции,

- список передаваемых параметров.

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

// нахождение максимального из двух чисел.

int max(int a, int b){

int t;

if(a>b)

t=a;

Else

t=b;

return t;

}

Первая строка функции – заголовок, который указывает, что в функцию с именем max передаются два целочисленных параметра a и b, а в вызывающую программу возвращается целочисленное значение с помощью оператора return .

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

#include <iostream.h>

Int max(int , int ); // в прототипе достаточно указать только тип и

// количество аргументов!

void main()
{

int n, m, l;

cout<< “vvedite n, m”;

cin>>n>>m;

l = max(n,m); // вызов функции и присвоение значения переменной l

cout<< “max = “<<l<<endl;

}

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

Где следует размещать определение функции max? Возможны варианты:

- после функции main

- в отдельном файле, который следует добавить в проект.

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

Функция max имела параметры, с помощью которых обменивалась данными с вызывающей функцией. Однако функция может не иметь параметров, как в следующем примере.

//Функция без параметров возвращает случайное целое от 1 до 6

int MyRand(){

return rand()%6+1; // функция rand возвращает целое от 0 до RAND_MAX

}

Таким образом, общая форма записи функции имеет вид:

имяТипа имяФункции (списокАргументов)

{

операторы;

Return значение; // тип возвращаемого значения определяется типом

// функции (имяТипа)

}

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

int func(){ return 1;} // правильное выражение

double func1(){ return 1;} // правильно, 1 преобразуется к типу double

int func2(){return 0.146;} // неправильно, 0.146 преобразуется к int с

// потерей точности

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

Если функция выполняет какие-то действия, но не возвращает значения, то ее следует описать как void:

// функция меняет местами значения p и q

Void swap(int p, int q)

{

int t = p;

p = q;

q = t;

}

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

int bigger(int a,int b)

{

if (a>b)

return a; // если a>b, функция заканчивает выполняться здесь

Else

Return b; // иначе выполнение функции заканчивается здесь

}

 

О пользе прототипов

Прототип описывает интерфейс функции и облегчает компиляцию программы. Почему? Во-первых, прототип сообщает компилятору о количестве аргументов функции и их типе. Если в вызывающей функции нарушено соответствие между ними, то компилятор выдаст сообщение об ошибке. Во-вторых, прототип содержит указание на тип возвращаемого значения функции, и под него отводится конкретный размер памяти. Без прототипа эти действия были бы затруднены, особенно когда функция размещена в отдельном файле. То же самое относится к случаю, когда функция содержится в какой-либо внешней библиотеке[6]. Еще одним аргументом «за» прототипирование функций является стиль программирования, принятый в С++. Он требует, чтобы функция main() всегда была первой и определяла структуру всей программы.

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

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

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

 

 

Упражнения.

1. Реализуйте программу вычисления случайных чисел, пример которой приведен в 4.1. Выведите значение RAND_MAX. Для использования функции rand( ) необходимо подключить заголовочный файл stdlib.h.

 

 

Заголовочные файлы.

Заголовочные файлы C++

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

Заголовочные файлы, подобно программам на C++, представляют собой файлы в формате ASCII, содержимое которых вы можете просмотреть или напечатать. Чтобы лучше понять содержимое заголовочных файлов, найдите время для того, чтобы напечатать заголовочный файл IOSTREAM.H, содержимое которого вы будете использовать в каждой создаваемой вами программе на C++. Обычно заголовочный файл IOSTREAM.H расположен в подкаталоге с именем INCLUDE, который находится в каталоге, содержащем файлы компилятора C++. Используйте текстовый редактор, чтобы просмотреть и напечатать содержимое заголовочных файлов.



Последнее изменение этой страницы: 2016-07-22

headinsider.info. Все права принадлежат авторам данных материалов.