Языки и технологии программирования

Лекция 5. C/C++ и другие современные языки программирования

C++ — компилируемый статически типизированный язык программирования общего назначения.

Поддерживая разные парадигмы программирования, сочетает свойства как высокоуровневых, так и низкоуровневых языков.

В сравнении с его предшественником — языком C, — наибольшее внимание уделено поддержке объектно-ориентированного и обобщённого программирования.

C++ возник в начале 1980-х годов в Bell Laboratories, когда сотрудник фирмы Бьёрн Страуструп усовершенствовал язык C под собственные нужды.

В 1983 году произошло переименование языка из C с классами в C++.

В 1985 году вышло первое издание «Языка программирования C++» и состоялся первый коммерческий выпуск. В 1989 году состоялся выход C++ версии 2.0.

В 1990 году вышло «Комментированное справочное руководство по C++», положенное впоследствии в основу стандарта. В 1998 году был опубликован стандарт ISO/IEC 14882:1998 (известный как C++98).В 2003 году комитет по стандартизации разработал исправленную версию стандарта, ISO/IEC 14882:2003.В настоящее время разрабатывается новая версия стандарта, неофициально называемая C++1x.

При проектировании языка C++, в него были заложены фундаментальные принципы:

ñ  Получить универсальный язык со статическими типами данных, эффективностью и переносимостью языка C.

ñ  Непосредственно и всесторонне поддерживать множество стилей программирования, в том числе процедурное программирование, абстракцию данных, объектно-ориентированное программирование и обобщённое программирование.

НЕ нашли? Не то? Что вы ищете?

ñ  Дать программисту свободу выбора, даже если это даст ему возможность выбирать неправильно.

ñ  Максимально сохранить совместимость с C, тем самым делая возможным лёгкий переход от программирования на C.

ñ  Избежать разночтений между C и C++: любая конструкция, допустимая в обоих языках, должна в каждом из них обозначать одно и то же и приводить к одному и тому же поведению программы.

ñ  Избегать особенностей, которые зависят от платформы или не являются универсальными.

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

Стандарт C++ 2003 года состоит из двух основных частей: описание ядра языка и описание стандартной библиотеки.

C++, являясь языком высокого уровня (ЯВУ), имеет в себя как необъектно-ориентированные возможности, так и объектно-ориентированные.

Необъектно-ориентированные возможности языка C++

1.Типы.

В C++ доступны следующие встроенные типы:

ñ  Символьные: char, wchar_t.

ñ  Целочисленные знаковые: signed char, short int, int, long int.

ñ  Целочисленные беззнаковые: unsigned char, unsigned short int, unsigned int, unsigned long int.

ñ  С плавающей точкой: float, double, long double.

ñ  Логический: bool, имеющий значения true и false.

2. Пространства имен (namespace).

3. Аргументы по умолчанию.

4. Перегрузка функций.

5. Перегрузка операторов.

6. Операторы new / delete.

7. Исключения.

8. Шаблоны функций.

Объектно-ориентированные особенности языка С++

C++ добавляет к C объектно-ориентированные возможности. Он вводит классы, которые обеспечивают три самых важных свойства ООП: инкапсуляцию, наследование и полиморфизм.

Особенности объектно-ориентированного C++ являются:

ñ  Описание функций в теле класса

ñ  Константные функции-члены

ñ  В классах всегда есть специальные функции — конструкторы и деструкторы, которые могут быть объявлены явно или неявно

ñ  Перегрузка операторов

Стандартная библиотека С++ включает в себя сущности, специфичные для С++, так и, частично, стандартную библиотеку C с небольшими изменениями.

Стандартная библиотека C++ состоит из следующих разделов:

1. Поддержка языка

<cstddef> — описания стандартных типов

<limits>, <climits>, <cfloat> — средства доступа к свойствам реализации языка

<cstdlib> — средства завершения программы

<new> — управление динамическим выделением памяти

<typeinfo> — получение информации о типах во время выполнения программы

<exception> — обработка исключеий<cstdarg>, <csetjmp>, <ctime>, <csignal>, <cstdlib> — прочие средства времени выполнения

2. Средства диагностики

<stdexcept> — стандартные классы исключений

<cassert> — диагностические утверждения

<cerrno> — средства работы с кодами ошибок

3. Средства общего назначения

<utility> — обобщённые операторы и пары

<functional> — стандартные обобщённые функторы, операции связывания аргументов и функциональные адаптеры

<memory> — средства управления памятью, в том числе аллокатор, специальные алгоритмы и класс auto_ptr<ctime> — типы и функции для работы с датами и временем

4. Средства работы с текстовыми строками

<string> — строковые классы и характеристики символов

<cctype>, <cwctype>, <cstring>, <cwchar>, <cstdlib> — средства работы с символьными строками, завершающимися нулём

5. Средства интернационализации

<locale> — объекты национально-культурного контекста

<clocale> — объекты национально-культурного контекста стандартной библиотеки C

6. Контейнеры

<deque>, <list>, <queue>, <stack>, <vector> — последовательные контейнеры и контейнерные адаптеры

<map>, <set> — ассоциативные контейнеры

<bitset>

7. Итераторы

<iterator> — характеристики и стандартные теги итераторов, обратные итераторные адаптеры и итераторы вставки, итераторы потоков ввода-вывода

8. Алгоритмы

<algorithm> — немодифицирующие алгоритмы, модифицирующие алгоритмы, алгоритмы сортировки и упорядоченных интервалов

<cstdlib> — алгоритмы стандартной библиотеки языка C

9. Численные алгоритмы

<complex> — класс комплексных чисел

<valarray> — численные массивы

<numeric> — обобщённые численные алгоритмы

<cmath>, <cstdlib> — математические функции стандартной библиотеки языка C

10. Средства ввода-вывода

<iosfwd> — предварительные объявления типов

<iostream> — классы стандартных потоков ввода-вывода

<ios> — базовые классы библиотеки

<streambuf> — классы потоковых буферов

<istream>, <ostream>, <iomanip> — средства форматирования, потоковые манипуляторы

<sstream>, <cstdlib> — строковые потоки

<fstream>, <cstdio>, <cwchar> — файловые потоки

11. Standard Template Library (STL)

STL (библиотека стандартных шаблонов) до включения в стандарт C++ была сторонней разработкой, в начале фирмы HP, а затем SGI.

Проект под названием STLport, основанный на SGI STL, осуществляет постоянное обновление STL, IOstream и строковых классов.

Достоинства С++.

C++ — чрезвычайно мощный язык, содержащий средства создания эффективных программ практически любого назначения.

Поддерживаются различные стили и технологии программирования.

Предсказуемое выполнение программ является важным достоинством для построения систем реального времени.

Пользовательские функции-операторы позволяют кратко и ёмко записывать выражения над пользовательскими типами в естественной алгебраической форме.

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

Возможность имитации расширения языка для поддержки парадигм, которые не поддерживаются компиляторами напрямую.

Возможность создания встроенных предметно-ориентированных языков программирования.

Кроссплатформенность.

Эффективность.

Имеется возможность работы на низком уровне с памятью, адресами.

Высокая совместимость с языком C, позволяющая использовать весь существующий C-код.