Компьютерные книги
Главное меню
Главная Поиск по сайту Добавить материал О нас Карта книг Карта сайта
Реклама
computersbooks.net -> Добавить материал -> Языки программирования -> Кубенский А.А. -> "Структуры и алгоритмы обработки данных. Объектно-ориентированный подход и реализация на C++" -> 5

Структуры и алгоритмы обработки данных. Объектно-ориентированный подход и реализация на C++ - Кубенский А.А.

Кубенский А.А. Структуры и алгоритмы обработки данных. Объектно-ориентированный подход и реализация на C++ — Спб.: БВХ-Петербург , 2004. — 464 c.
ISBN 5-94157-506-8
Скачать (прямая ссылка): strukturiialgoritmiobrabotkidannih2004.djvu
Предыдущая << 1 .. 2 3 4 < 5 > 6 7 8 9 10 11 .. 161 >> Следующая

В качестве исключительной ситуации при задании неправильных индексов будем использовать стандартный класс библиотеки STL out of range, однако текст сообщения будем генерировать, исходя из каждой конкретной ситуации. В тексте класса также используется идентификатор byte как сокращение для unsigned char. В этом листинге и везде далее в книге содержатся тексты сразу нескольких файлов. Обычно это заголовочный файл и файл реализации класса или нескольких классов. Тексты, принадлежащие разным файлам, отделены друг от друга комментариями, содержащими имена соответствующих файлов.
В этом и во всех последующих листингах в книге комментарии сделаны на русском, однако все программные строки приведены на английском языке. Это позволит получать осмысленные результаты работы программы при использовании любого компилятора и операционной среды. Английский язык используется также при составлении всех наименований (идентификаторов), применяющихся в программах. Конечно, выбор именно английского языка в качестве языка представления результатов может создать некоторые (надеемся, не очень большие) трудности для читателей, слабо знакомых с этим языком, однако это в любом случае не должно мешать пониманию сути работы программы. Независимость от среды можно было бы сохранить также при написании идентификаторов и программных строк на русском языке в латин-
12
Глава 1
ской транслитерации, но, по мнению автора, это выглядит ужасно, и часто расшифровка подобных идентификаторов оказывается еще сложнее, чем понимание не очень знакомого английского слова.
{ Листинг 1.1. Определение и реализация класса CodeTable
//---------- файл codetable.h -------------------------------------------------
typedef unsigned char byte;
// Определение класса: class CodeTable {
byte lBound; // нижняя граница элементов
byte hBound; // верхняя граница элементов
byte *array; // собственно массив с кодами символов
public :
//В конструкторе задаются границы создаваемого массива
//и, возможно, массив для начального заполнения кодовой таблицы
CodeTable(byte low, byte high, byte* iniTable = 0);
// Следующий конструктор - это конструктор копирования CodeTable(const CodeTable &src);
// Деструктор освобождает занятую память -CodeTable();
// Реализация операции индексации как для обычного массива byte& operator[](byte i);
}; // конец определения класса CodeTable
//---------- файл codetable.срр -----------------------------------------------
// Реализация операций класса
CodeTable::CodeTable(byte low, byte high, byte* iniTable) { if ((hBound = high) < (lBound = low)) {
throw out_of_range(
"CodeTable constructor: lower bound is higher than upper one");
}
// Инициализация таблицы array = new byte[high - low +1]; for (byte code = lBound;; code++) { array[code - lBound] = code; if (code == hBound) break;
}
Способы представления структур данных
13
if (miTable) {
for (byte ndx = 0; ndx <= high - lBound && iniTable[ndx]; ndx++) array[ndx] = iniTable[ndx];
}
}
CodeTabie::CodeTabie(const CodeTabie &src) {
array = new byte [(hBound=src.hBound)-(lBound=src.lBound)+1]; for (byte ndx = lBound;; ndx++) {
array[ndx-lBound] = src.array[ndx-lBound]; if (ndx == hBound) break;
}
}
// Деструктор
CodeTabie::-CodeTabie() { delete[] array; }
byte& CodeTabie::operator[](byte i) { if (i < lBound || i > hBound) {
throw out_of_range("Index is out of range");
}
return array[i - lBound];
}
Теперь решение той же задачи кодирования текста с помощью нашей новой кодовой таблицы может выглядеть так же просто, как и раньше:
void doCode(byte* source, byte* dest, CodeTabie & codeTable) { for (int i = 0; source[i]; i++) {
dest[i] = codeTable[source[i]];
}
}
Полностью текст, содержащий определение класса CodeTable, а также тестовая программа для проверки его работоспособности приведены на приложенном компакт-диске в папке "\chapteri\i.i\codeTabie". Вы можете попробовать внести некоторые изменения в программу, например, расширив диапазон кодируемых значений и кодов, определив новые операции над таблицей или вообще изменив ее реализацию.
Конечно, определение класса CodeTable не является универсальным и, скорее всего, для решения другой подобной задачи потребуется запрограммировать другой класс. Можно попробовать написать универсальный класс, который затем можно будет использовать во многих программах, где требуется обработка массивов. Несмотря на некоторую тяжеловесность, такой класс имеет
14
Глава 1
право на существование, и многие стандартные библиотеки имеют в своем составе подобные классы. Оправданием для написания его может служить стремление убрать некоторые недостатки стандартных массивов, с которыми приходится сталкиваться чаще всего. Нестандартное решение все же может потребоваться в том случае, когда стандартные средства не имеют всех необходимых функций или слишком неэффективны для проектируемой программы.
В листинге 1.2 и в папке "\Chapterl\l.i\DynArray" компакт-диска приведен пример такого универсального класса DynArray. Этот пример показывает, как можно самому определить массив с плавающей верхней границей. Такой массив можно расширять или укорачивать с помощью метода resize, а также с помощью операции add добавлять в его конец новые элементы. Разумеется, определены конструкторы и деструктор. Для увеличения общности вместо определения класса определим шаблон с параметром Elem, задающим тип элементов массива. Поскольку определяется не класс, а шаблон классов, то определение всех операций этого шаблона помещено вместе с определением самого шаблона в один и тот же файл dynarray .h.
Предыдущая << 1 .. 2 3 4 < 5 > 6 7 8 9 10 11 .. 161 >> Следующая
Книги
Web-программирован-
ие
Аппаратное обеспечение Графика Руководство по П.О. Самоучитель Теория программирования Фотошоп Языки программирования
Новые книги
Вирт Н. "Систематическое программирование " (Теория программирования)

Эком "Microsoft Excel 2000 шаг за шагом Русская версия самоучитель " (Самоучитель)

Поляков А.Ю. "Методы и алгоритмы компьютерной графики в примерах Vizual C++" (Графика)

Баяковский Ю.М. "Графическая библиотека Open GL " (Графика)

Валиков А. "Технология " (Языки программирования)
Авторские права © 2013 ComputersBooks. Все права защищены.