История создания и общая характеристика языка C++
Язык программирования C++ разработан сотрудником фирмы Bell Labs Бьёрном Страуструпом в начале 1980-х годов, в виде усовершенствований к языку процедурно-ориентированного языка C. При работе над моделированием телефонной сети он обнаружил, что попытки применения существующих в то время языков моделирования оказываются неэффективными, а применение высокоэффективных машинных языков слишком сложно из-за их ограниченной выразительности. Исходя из этих выводов, Бьёрн Страуструп решил дополнить язык C возможностями, имеющимися в языке Simula при разработке больших приложений, такими как работа с классами и объектами. В первую очередь в C были добавлены классы (с инкапсуляцией), дающие возможность определять и использовать новые типы данных. Концепция классов предполагала реализацию полиморфизма и наследования классов, позволяющее создавать новые производные классы с модифицированными методами и расширенными представлениями. Также была определена строгая проверка типов, inline-функции и аргументы по умолчанию. Ранние версии языка, первоначально именовавшегося «Си с классами», стали доступны с 1980 года. При разработке «C c классами», Страуструп создал транслятор CFront из исходного кода в язык С.
Причинами выбора языка C, в качестве основы для создания нового языка программирования Б.Страуструп объясняет тем что язык С:
1) является многоцелевым, лаконичным и относительно низкоуровневым языком;
2) подходит для решения большинства системных задач;
3) исполняется везде и на всём;
4) cтыкуется со средой программирования UNIX.
К 1983 году в язык были добавлены виртуальные функции, перегрузка функций и операторов, ссылки, константы, пользовательский контроль над управлением свободной памятью, улучшенная проверка типов и новый стиль комментариев (//). В результате, получившийся язык уже перестал быть просто дополненной версией классического C и в октябре 1985 года в публикации книги Б.Страуструпа был представлен как «С++».
Имя получившегося языка, можно объяснить как «следующая версия после C», так как «++» в названии, является обозначением оператора инкремента, то есть увеличение переменной на единицу, используемого в языках объектно-ориентированного программирования (С++, Java, C# и др). Язык также не был назван D, поскольку «является расширением C и не пытается устранять проблемы путём удаления элементов C».
Стандарт языка C++ был создан в 1998 году и состоит из двух основных частей: ядра языка и стандартной библиотеки. Стандартная библиотека включает в себя библиотеку шаблонов STL, которая содержит определения шаблонов контейнеров, итераторов, алгоритмов и функторов. Стандарт C++ содержит нормативную ссылку на стандарт Си от 1990 года и не определяет самостоятельно те функции стандартной библиотеки, которые заимствуются из стандартной библиотеки Си. На данный момент последней версией стандарта языка является С++14, которое можно рассматривать как небольшое расширение над С++11, содержащее в основном исправления ошибок и небольшие улучшения.
С++ широко используется для разработки программного обеспечения: создание операционных систем, прикладных программ, драйверов устройств, различных приложений и других.
Достоинства:
• Высокая совместимость с языком С : код на С может быть с минимальными переделками скомпилирован компилятором C++.
• Вычислительная производительность. Язык спроектирован так, чтобы дать программисту максимальный контроль над всеми аспектами структуры и порядка исполнения программы. Имеется возможность работы с памятью на низком уровне.
• Поддержка: процедурного, модульного программирования, абстракции данных, обобщённого программирования.
• Автоматический вызов деструкторов объектов в порядке обратном вызову конструкторов упрощает и повышает надёжность управления памятью и другими ресурсами (открытыми файлами, сетевыми соединениями, соединениями с базами данных и т. п.).
• Перегрузка операторов позволяет записывать выражения над пользовательскими типами в естественной алгебраической форме.
• Имеется возможность управления константностью объектов (модификаторы const, mutable, volatile). Использование константных объектов повышает надёжность и служит подсказкой для оптимизации.
• Шаблоны C++ дают возможность построения обобщённых контейнеров и алгоритмов для разных типов данных, а также производить вычисления на этапе компиляции.
• Возможность расширения языка для поддержки парадигм, которые не поддерживаются компиляторами напрямую.
• Возможность встраивания предметно-ориентированных языков программирования в основной код.
• Доступность. Для С++ существует огромное количество учебной литературы, переведённой на всевозможные языки.
Недостатки:
1) Плохо продуманный синтаксис сужает область применения языка. Одним из главных недостатков языка является его синтаксис. Определение синтаксиса является одним из самых громоздких и продолжает расширяться. Стандарт 2003 г. содержал уже более 200 строк. Громоздкость синтаксиса С++ порождает некоторые проблемы:
• cтановится невозможным редактирование синтаксиса языка программистом для адаптации к требованиям предметной области;
• cуществуют отклонения от стандарта в различных компиляторах, влекущие несовместимость программ на C++ между компиляторами;
• принуждение к избыточности - несколько перегружающих друг друга способов получить один и тот же результат, так что использующие их программисты оказываются свободны в выборе.
2) Унаследованные от C низкоуровневые свойства существенно тормозят и затрудняют прикладную разработку, то есть использование высокоуровневых конструкций затрудняется даже в задачах, где низкоуровневые возможности сами по себе не используются.
3) Язык не содержит многих важных возможностей.
4) Язык содержит опасные возможности, существенно снижающие качество программ сразу по всем показателям.
5) Непрерывная эволюция языка вынуждает разработчиков раз за разом изменять уже отлаженный код — это не только удорожает разработку, но и несёт риск внедрения в код новых ошибок. В виду того что, с 1999 года Си перестал быть подмножеством С++, отлаженный код на Си уже не может использоваться в проекте на С++ без изменений.
6) Ненадёжность продукта. Неоправданное обилие побочных эффектов, отсутствие контроля со стороны системы времени исполнения языка и слабая система типов, делает программы на С++ традиционно нестабильными, что исключает применение C++ при высоких требованиях отказоустойчивости. Кроме того, это увеличивает время процесса разработки.
Для того, чтобы получить первоначальное представление о программировании на С++, рассмотрим пример.
Пример.«Hello world!»:
1. Первая строка кода представляет собой комментарий, который начинается с символов // и заканчивается концом строки.
2. Вторая строка служит для подключения встроенной библиотеки языка для вывода на экран.
3. Последующая часть программы называется блоком описания главной функции. Где 4-я строка начинается с заголовка главной функции, имя которой main. Слово void обозначает, что главная функция не возвращает никаких значений в результате своего выполнения, а пустые скобки обозначают отсутствие аргументов.
4. Тело главной функции заключается в фигурные скобки { }. Текст программы содержит оператор вывода на экран: cout, - и содержимое выводимого текста.