Языки и технологии программирования
Лекция 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-код.


