Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

С++ ЕНФ / мои отчёты / Отчёт по Лабе №4

.doc
Скачиваний:
19
Добавлен:
25.05.2014
Размер:
46.59 Кб
Скачать

Министерство науки и образования Российской Федерации

Уфимский государственный авиационный технический университет

Кафедра ВВТиС

ОТЧЁТ

по лабораторной работе №4

Ссылки и Шаблоны в С++

Выполнил: студент гр. ПМ-125

Марьин Д.Ф.

Проверил: ст. преподаватель каф. ВВТиС

Насибуллаева Э.Ш.

Уфа 2005

Цель работы

  • Разобраться в особенностях объявления ссылок

  • Уяснить связь между константным указателем и ссылкой

  • Разобраться в чём преимущество использования ссылок при передаче данных в функцию и при возвращении результата по ссылке

  • Научиться использовать шаблоны функций в целях повышения уровня открытости функции к разным типам переменных

Задание к лабораторной работе № 4

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

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

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

Во всех программах должна быть предусмотрена защита ввода данных.

1.ТЕОРЕТИЧЕСКАЯ ЧАСТЬ

1.1.Ссылки

Ссылка является другим именем объекта. Главное применение ссылок состоит в спецификации операций для типов, определяемых пользователем . Они могут также быть полезны в качестве параметров функции. Запись x& означает ссылка на x.

Ссылка должна быть инициализирована (должно быть что-то, для чего она является именем). Заметьте, что инициализация ссылки есть нечто совершенно отличное от присваивания ей. Вопреки ожиданиям, ни одна операция на ссылку не действует.

Следовательно, после инициализации значение ссылки не может быть изменено; она всегда ссылается на объект, который ей было дано обозначать (денотировать) при инициализации. Чтобы получить указатель на объект, денотируемый ссылкой rr, можно написать &rr. Очевидным способом реализации ссылки является константный указатель, который разыменовывается при каждом использовании. Это делает инициализацию ссылки тривиальной, когда инициализатор является lvalue. Однако инициализатор для &T не обязательно должен быть lvalue, и даже не должен быть типа T. В таких случаях: [1] Во-первых, если необходимо, применяются преобразование типа [2] Затем полученное значение помещается во временную переменную; и [3] Наконец, ее адрес используется в качестве значения инициализатора.

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

1.2.Шаблоны типов

Зачем программисту может понадобиться определить такой тип, как вектор

целых чисел? Как правило, ему нужен вектор из элементов, тип которых

неизвестен создателю класса Vector. Следовательно, надо суметь определить

тип вектора так, чтобы тип элементов в этом определении участвовал как

параметр, обозначающий "реальные" типы элементов:

template < class T > class Vector

Таково определение шаблона типа. Он задает способ получения семейства

сходных классов. В нашем примере шаблон типа Vector показывает, как можно

получить класс вектор для заданного типа его элементов. Это описание

отличается от обычного описания класса наличием начальной конструкции

template<class T>, которая и показывает, что описывается не класс, а

шаблон типа с заданным параметром-типом (здесь он используется как тип

элементов).

Использование шаблона типа не влечет за собой каких-либо дополнительных расходов времени по сравнению с использованием класса, в котором все типы указаны непосредственно.

2.ПРАКТИЧЕСКАЯ ЧАСТЬ

2.1.Описание программы 4LB1.cpp

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

2.2.Описание программы 4LB2.cpp

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

2.3.Описание программы 4LB3.cpp

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

ЗАКЛЮЧЕНИЕ

  • В результате написания данных программ я усвоил, в чём состоит основное назначение ссылки - изменение аргументов функции

  • Основное преимущество ссылок перед указателями состоит в том, что любые операции над ссылками выполняются также, как и над самим объектом

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

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

Список литературы

  1. Подбельский В.В. Язык Си++. – М.: Финансы и статистика,1996.­­­­­–560 с.

  2. Дейтел Х., Дейтел П. Язык пограммирования С++: перевод с англ.

М.:ЗАО «Издательство БИНОМ»,1998,1024с.

Соседние файлы в папке мои отчёты