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

2.6 Вызовы функций по значению и по ссылке, смысловое содержание.

1) По значению – по умолчанию (информация защищена)

2) По ссылке – исп вызов по адресу ячейки, может изменяться значение переменной – меньше ресурсов, быстрее, но меньшая надежность.

1. fun_by_val(int a)

2. fun_by_ref(int &b)

b в данном случае локальная переменная, параметр-ссылка принимает адрес и работает со значением по нему.

2.7 Организация вызовов функций по ссылке, варианты, примеры.

#include <iostream>

using std::cout; using std::endl;

void squareByRef(int &);

void main()

{

int y=4;

cout << “y= ” << y << “befor call squareByRef” << endl;

squareByRef(y);

cout << “y= ” << y << “after call squareByRef” << endl;

}

void squareByRef(int &b) {b*=b;}

2.8 Вызов функции через использование параметра – ссылки – псевдонима переменной.

#include <iostream>

using std::cout; using std::endl;

void main()

{

int x=3, &y=x;

cout << “x= ” << x << endl << “y= ” << y << endl; (x=3, y=3)

y=7;

cout << “x= ” << x << endl << “y= ” << y << endl; (x=3, y=7)

}

2.9 Прототипы функций в C/C++, назначение, особенности использования.

Введены в С++, в исходном С их не было. В дальнейшем приняты для С стандартом ANSI/ISO. Их использование является теперь обязательным для С/С++, хотя возможны исключения.

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

Прототип используется для проверки компилятором правильности вызова функции, контроль. В С этого не было => много ошибок.

- Компилятор игнорирует имена аргументов

- Прототип необходимо вставлять до вызова функции, либо до определения (лучше)

Стандарт ANSI/ISO использует прототипы, но их можно и не прописывать. В С/С++ существует автоматическая подсистема формирования прототипов функций, которых мы не создали. Такие прототипы формируются компилятором на основании первой «вставки» функции в программу. При этом тип возвращаемого значения int, а типы параметров игнорируются вообще.

Прототип необходимо определить вне каких либо функций, например до мэйн, или для подфункции (локальной), для экономии ресурсов.

2.11 Перегружаемые функции в С++, назначение, пример.

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

int square(int x) {return x*x;}

double square(double y) {return y*y;}

2.12 Что такое сигнатуры – уникальные кодовые идентификаторы, пример.

Идентификаторы – имя, тип данных, значение (в С входят еще несколько: класс памяти, период хранения, область действия, тип компоновки)

2.13 Шаблоны функций в C/С++, назначение, примеры.

Нововведение С++. Идея этой программной конструкции родственна конструкции перегружаемой функции. Организация однонаправленных действий, несколько раз по-разному используя одно имя.

Но! Отличие шаблонов от перегруженных функций

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

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

Объявление шаблонной функции должно начинаться с ключевого слова template. Синтаксис: наличие открывающих и закрывающих скобок, в теле функции список параметров. Каждый параметр должен начинаться с ключевого слова class или typedef (данные пользователя)

template <class x, class y, typedef z>

2.14 Пространство имён в C/С++, назначение, примеры.

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

using namespace std;