C++ - Страустрап Бьярн, Хилл Мюррей
-
Название:C++
-
Автор:
-
Жанр:
-
Оригинал:Английский
-
Язык:Русский
-
Страниц:161
-
Рейтинг:
-
Ваша оценка:
Основным термином С++ является класс. Класс – это вид, который определяет сам пользователь. Классы обеспечивают анонимность данных, обеспеченную инициализацию информации, смутное преобразование видов для видов, определенных эксплуатантом, меняющееся задание вида, управляемые пользователем контроль над памятью и механизмы перезагрузки процессов. С++ предоставляет более качественные, чем в C, средства выражения модульного принципа программы и проверки видов. В языке также присутствуют апгрейды, не связанные напрямую с классами, включающие в себя символические постоянные, параметры функции по умолчанию, inline-подстановку функций, операции управления свободной памятью и ссылочный тип, перезагруженные имена функций. В С++ сохранены потенциалы языка C по работе с заглавными предметами машинного обеспечения (байты, биты, адреса, слова и т.п.). Это дает шанс весьма продуктивно воспроизводить виды, определяемые эксплуатантом.
С++ и его библиотеки установленные по умолчанию спроектированы так, чтобы гарантировать переносимость. Имеющееся на данный временной отрезок воспроизводство языка будет идти в большинстве систем, которые в состоянии поддерживать C. Из С++ программ возможно прибегать к пользованию C библиотеки, и с С++ возможно прибегать к пользованию большей части инструментальных средств, поддерживающих программирование на C.
Эта книга рассчитана в первую очередь для того, чтобы оказать помощь опытным программистам изучить язык и применять его в нестандартных проектах. В ней дано полное описание С++, множество фрагментов программ и примеров.
C++ - Страустрап Бьярн, Хилл Мюррей читать онлайн бесплатно полную версию книги
Для всех видов контейнеров существуют очевидные примеры: таблицы, множества, списки, вектора, словари и т.д. Такой класс имеет операцию «вставить», обычно он также имеет оперции для проверки того, был ли вставлен данный элемент. В нем могут быть действия для осуществления проверки всех элементов в определенном порядке, и кроме всего прочего, в нем может иметься операция для удаления элемента. Обычно контейнерные (то есть, вмещающие) классы имеют конструкторы и деструкторы.
Сокрытие данных и продуманный интерфейс может дать коцепция модуля (см. например #4.4: файлы как модули). Класс, однако, является типом. Чтобы использовать его, необходимо создать объекты этого класса, и таких объектов можно создвать столько, сколько нужно. Модуль же сам является объектом. Чтобы использовать его, его надо только инициализировать, и таких объектов ровно один.
5.3.1 Альтернативные реализации
Пока описание открытой части класса и описание функций членов остаются неизменными, реализацию класса можно модифцировать не влияя на ее пользователей. Как пример этого расмотрим таблицу имен, которая использовалась в настольном калькуляторе в Главе 3. Это таблица имен:
struct name (* char* string; char* next; double value; *);
Вот вариант класса table:
// файл table.h
class table (* name* tbl; public: table() (* tbl = 0; *)
name* look(char*, int = 0); name* insert(char* s) (* return look(s,1); *) *);
Эта таблица отличается от той, которая определена в Глве 3 тем, что это настоящий тип. Можно описать более чем одну
table, можно иметь указатель на table и т.д. Например:
#include «table.h»
table globals; table keywords; table* locals;
main() (* locals = new table; // ... *)
Вот реализация table::look(), которая использует линеный поиск в связанном списке имен name в таблице:
#include «string.h»
name* table::look(char* p, int ins) (* for (name* n = tbl; n; n=n-»next) if (strcmp(p,n-»string) == 0) return n;
if (ins == 0) error(«имя не найдено»);
name* nn = new name; nn-»string = new char[strlen(p)+1]; strcpy(nn-»string,p); nn-»value = 1; nn-»next = tbl; tbl = nn; return nn; *)
Теперь рассмотрим класс table, усовершенствованный таким образом, чтобы использовать хэшированный просмотр, как это делалось в примере с настольным калькулятором. Сделать это труднее из-за того ограничения, что уже написанные программы, в которых использовалась только что определенная версия класа table, должны оставаться верными без изменений:
class table (* name** tbl; int size; public: table(int sz = 15); ~table();
name* look(char*, int = 0); name* insert(char* s) (* return look(s,1); *) *);
В структуру данных и конструктор внесены изменения, оражающие необходимость того, что при использовании хэшировния таблица должна иметь определенный размер. Задание конструктора с параметром по умолчанию обеспечивает, что страя программа, в которой не указывался размер таблицы, остнется правильной. Параметры по умолчанию очень полезны в стуации, когда нужно изменить класс не повлияв на старые программы. Теперь конструктор и деструктор создают и уничтжают хэш-таблицы:
table::table(int sz) (* if (sz « 0) error(„отрицательный размер таблицы“); tbl = new name*[size=sz];
for (int i = 0; i«sz; i++) tbl[i] = 0; *)
table::~table() (* for (int i = 0; i«size; i++) for (name* n = tbl[i]; n; n=n-»next) (* delete n-»string; delete n; *) delete tbl; *)
Описав деструктор для класса name можно получить более простой и ясный вариант table::~table(). Функция просмотра практически идентична той, которая использовалась в примере настольного калькулятора (#3.1.3):