Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
###Cpp_лкц1_1.09_11_#дляБАК#29_01_12.doc
Скачиваний:
67
Добавлен:
29.04.2019
Размер:
6.42 Mб
Скачать

Часть II. Объектно-ориентированное программирование

Отличия структур и объединений от классов

Структуры (struct) и объединения (union) представляют собой частные случаи классов.

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

Отличия объединений от классов перечислены ниже:

  • доступ в объединениях по умолчанию publ ic, кроме того, в них вообще нельзя явным образом использовать спецификаторы доступа;

  • объединение не может участвовать в иерархии классов;

  • элементами объединения не могут быть объекты, содержащие конструкторы и деструкторы;

  • объединение может иметь конструктор и другие методы, только не статические;

  • в анонимном объединении нельзя описывать методы.

Глава 6

Шаблоны классов

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

Параметризованный класс создает семейство родственных классов, которые можно применять к любому типу данных, передаваемому в качестве параметра. Наиболее широкое применение шаблоны находят при создании контейнерных классов. Контейнерным называется класс, который предназначен для хранения каким-либо образом организованных данных и работы с ними. Стандартная библиотека C++ содержит множество контейнерных классов для организации структур данных различного вида (они описаны в разделе «Контейнерные классы» на с. 295).

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

Создание шаблонов классов

Рассмотрим процесс создания шаблона класса на примере. В разделе «Линейные списки» (с. 115) был описан двусвязный список и приведены алгоритмы работы с ним. Поскольку списки часто применяются для организации данных, удобно описать список в виде класса, а так как может потребоваться хранить данные различных типов, этот класс должен быть параметризованным.

Сначала рассмотрим непараметризованную версию класса «список».

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

class Node{ public:

212

Часть II. Объектно-ориентированное программирование

int d; // Данные

Node *next; // Указатель на последующий узел

Node *prev; // Указатель на предыдущий узел

NodeCint dat = 0){ // Конструктор

d = dat; next = 0; prev = 0;

Поскольку этот класс будет описан внутри класса, представляющего список, поля для простоты доступа из внешнего класса сделаны доступными (public). Это позволяет обойтись без функций доступа и изменения полей. Назовем класс списка List:

class List{ class Node{

}: '"

Node *pbeg. *pend; // Указатели на начало и конец списка

public:

List(){pbeg = 0: pend = 0:} //Конструктор

-ListO: // Деструктор