национальный исследовательский томский политехнический университет
Скачать 1.38 Mb.
|
34 3.3.2 Программная реализация алгоритмов В качестве языка программирования для реализации данного проекта был выбран С++ – компилируемый статически типизированный язык программирования общего назначения. Поддерживает такие парадигмы программирования, как процедурное программирование, объектно-ориентированное программирование, обобщённое программирование. Язык имеет богатую стандартную библиотеку (std), которая включает в себя распространённые контейнеры и алгоритмы, ввод-вывод, регулярные выражения, поддержку многопоточности и другие возможности. C++ сочетает свойства как высокоуровневых, так и низкоуровневых языков. Листинги всех файлов представлены в Приложении Б. 3.3.2.1 Понятие класса Класс – тип данных, определенный программистом. Он может содержать элементы данных, которые могут быть как переменными базовых типов C++, так и других определённых программистом типов. Элементы данных класса могут быть отдельными элементами данных, массивами, указателями, массивами указателей почти любого рода, объектами других классов. Класс также может содержать функции, которые оперируют объектами класса, обращаясь к элементам данных, которые они включают в себя. Таким образом, класс объединяет определение элементарных данных, из которых состоит объект, и средства манипулирования данными, относящимися к индивидуальным объектам класса. Данные в классе называются полями, а функции – методами. При определении класса создаётся «проект» типа данных. Это в действительности не создаёт никаких данных, но определяет смысл имени класса, т. е. что будет содержать объект этого класса и какие операции могут быть выполнены над таким объектом [12]. 35 3.3.2.2 Шаблоны классов В язык C++ включен механизм для определения шаблонов функций, которые автоматически создают различные вариации функции в зависимости от типа полученного аргумента или типа возвращаемого значения. Шаблон класса сам по себе не является классом. Это некоторая разновидность «рецепта» для компилятора, по которому он создаёт код класса. Процесс создания класса из шаблона называется реализацией шаблона. Соответствующее определение класса создаётся тогда, когда вы создаёте экземпляр объекта шаблона класса для конкретного параметра типа, так что вы можете получить любое количество классов из одного-единственного шаблона [12]. 3.3.2.3 Перегрузка операторов Перегрузка операторов обеспечивает перепрограммирование операций таким образом, что в качестве операндов в них могут использоваться объекты интересующего нас типа. Переопределение операций заключается в том, что транслятор «начинает понимать», что означает известная операция, если одним (или всеми) его операндами является объект нужного нам класса. Также существуют некоторые ограничения: нельзя менять синтаксис языка – количество операндов, приоритеты операций и направление их выполнения; переопределение операций производится отдельно для каждого сочетания операндов, перестановка операндов транслятором не производится; можно менять способы передачи операндов (по ссылке, по значению), тип и способ возвращения результата; 36 никаких ограничений не накладывается на действия, выполняемые над объектами в переопределяемой операции (интерпретация операции может быть любой). Если операция работает с операндами, принадлежащими к некоторому классу, то её желательно внести в этот класс хотя бы для того, чтобы не было проблем с доступом к закрытой части объекта. Такой способ называется переопределением операции в классе и возможен, если первый операнд операции является объектом этого класса. Для этой цели вводится специально поименованный метод со следующим синтаксисом: метод определяется в классе первого операнда; имя метода – operator<знак операции>; первый операнд – текущий объект класса; второй операнд – формальный параметр, который может быть передан как по значению, так и по ссылке. Тип формального параметра должен совпадать с типом второго операнда; результат операции может быть произвольного типа, он может возвращаться как указатель, ссылка или значение; на действия, выполняемые в теле метода, ограничений не накладывается (содержательная интерпретация операции может быть любой); если формальный параметр или результат передаются по значению, а объект содержит динамические данные, то в классе необходим конструктор копирования, который автоматически вызывается при передаче такого операнда и возвращении результата по return [13]. 3.3.2.4 Контейнер «vector» Контейнеры – это объекты, используемые для хранения и организации объектов [12]. |