Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
SHPORY DLYA TEL.doc
Скачиваний:
41
Добавлен:
30.04.2015
Размер:
462.34 Кб
Скачать

24 Массивы объектов

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

Point2D P1[3]={Point2D(2,4),Point2D(3,3),Point2D(4,6)};

Point2D P2[3]={Point2D(5),Point2D(4),Point2D(3)};

Point2D P3[3]={5,4,3};

Point2D P4[3]={Point2D(4),5,Point2D(3,1)};

На первый взгляд кажется, что для каждого элемента массива создается временный элемент типа Point2D, а потом массив инициализируется этим объектами, с помощью конструктора копий. На самом деле лишних действий нет. Вызываются лишь конструкторы для областей памяти, соответствующих элементов массива. Если у класса конструктор операции new [], можно создать массив в динамической области памяти. Инициализация такого массива не допустима.

Операция new гарантирует вызов конструктора для каждого объекта массива.Чтобы можно было описать массив объектов класса с конструктором, этот класс должен иметь стандартный конструктор, т.е. конструктор, вызываемый без параметров. Например, в соответствии с определением table tbl[10]; будет создан массив из 10 таблиц, каждая из которых инициализируется вызовом table::table(15), поскольку вызов table::table() будет происходить с фактическим параметром 15. В описании массива объектов не предусмотрено возможности указать параметры для конструктора. Если члены массива обязательно надо инициализировать разными значениями, то начинаются трюки с глобальными или статическими членами. Когда уничтожается массив, деструктор должен вызываться для каждого элемента массива. Для массивов, которые размещаются не с помощью new, это делается неявно. Однако для размещенных в свободной памяти массивов неявно вызывать деструктор нельзя, поскольку транслятор не отличит указатель на отдельный объект массива от указателя на начало массива, например:

void f()

{

table* t1 = new table;

table* t2 = new table[10];

delete t1; // удаляется одна таблица

delete t2; // неприятность:

// на самом деле удаляется 10 таблиц

}

В данном случае программист должен указать, что t2 - указатель на массив. Функция размещения хранит число элементов для каждого размещаемого массива. Требование использовать для удаления массивов только операцию delete[] освобождает функцию размещения от обязанности хранить счетчики числа элементов для каждого массива. Исполнение такой обязанности в реализациях С++ вызывало бы существенные потери времени и памяти и нарушило совместимость с С.

25 Иерархическая,сетевая,реляционная модели представления данных.

Иерархическая – первая из реализованных в СУБД моделей данных, представляет собой связный гpаф типа деpева, веpшины котоpого pасположены на pазных иеpаpх. уpовнях. Структурная диаграмма иерархической БД представляет собой упорядоченное дерево в котором определено относительное расположение вершин и дуги, соответствующие функциональным связям, всегда направлены от корня к листья дерева. Корень - вершина в которую не входит ни одна дуга. Для этой модели присущи 2 ограничения: 1. Типы связей должны быть функциональными. 2. Структура связей должна быть древовидной.

Для иерархической БД определен полный порядок обхода - сверху-вниз, слева-направо. Основное правило: никакой потомок не может существовать без своего родителя.

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

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

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

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

Примерами реляционных БД могут быть: FoxPro, Clipper, Access и пр.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]