Самым далеким предком С++ считается язык BCPL (1966г. брит уч Мартином Ричардсом). BCPL напоминал смесь Алгола и Бейсика, появились фиг скобки. Первоначально предназначался для создания компиляторов. На нем было написано несколько ОС. Ее исходн текст транслировался в промеж О-код, кот затем переводился в код конкр процессора. Такая особенность BCPL, как слабая ориентация на конкретные комп архитектуры, являлась не только его сильной стороной. Язык Би (1969г.). Язык New B (1970г.). Язык Си (1972г.), в него в частности добавлен препроцессор. Си позволял строить очень компактные выражения, компилировавшийся в эффективный код, представляющий разработчику гибкие механизмы прямого доступа к операц системе.
Первые версии языка программирования Си++ (Си с классами) были разработаны в начале 80-х годов Бьярном Страуструпом (ученым Техасского унив при написании диссертации).
Единственной целью разработки было создание языка, на котором было бы удобно программировать автору и его друзьям. За основу был взят популярный Си. Первыми средствами, которыми был расширен Си, стали средства поддержки абстракций данных и ооп. В 1993 впервые была реализована коммерческий транслятор, и сам язык был назван «С++», что можно (имея в виду операцию инкрементирования языка Си).
Первым транслятором языка был препроцессор cfront, транслирующий программу на Си++ в эквивалентную программу на Си. И только в конце 80-х годов были реализованы прямые транслятор. Пионером среди таких трансляторов стал GNU CC. Первой книгой с описанием языка стала «The C++ Programming Language» (Addison-Wesley, 1985), переведенная на русский язык в 1991 году. С этого момента началось его бурное распространение и создание многочисленных реализаций.
Модель реализации ООП была частично позаимствована из языка программирования Simula67 и ориентировалась в основном на возможность эффективной реализации на вычислительных машинах со стандартной архитектурой. Некоторые возможности языка Simula были отклонены, так как, по мнению автора Си++, подталкивали разработчика к плохому стилю программирования. Так, в первых версиях Си++ полностью отсутствовала возможность динамической идентификации типа объекта (run-time type identification, rtti). C 1985 года в язык были введены возможности: множественное и виртуальное наследование, шаблоны функций и классов, обработка исключительных ситуаций. Кардинально изменена семантика совместного использования оператора new, изменен синтаксис для вложенных классов.
С момента опубликования и до настоящего момента язык постоянно усовершенствовался и расширялся. Важным этапом в его развитии стала публикация в 1990 году подробного и достаточно строгого описания языка (ARM). Фактически одновременно с этим началась стандартизация языка. Страуструп же выступал за реализации, в которых базовые возможности языка расширялись бы средствами и библиотеками, характерными только для данной реализации.
Стандартная библиотека шаблонов STL (standard template library) — набор шаблонов функций и классов в языке C++, включающий в себя различные контейнеры данных (список, очередь, множество, отображение, хэштаблица, очередь с приоритетами) и базовые алгоритмы (сортировка, поиск).STL до включения в стандарт C++ была сторонней разработкой, в начале — фирмы HP, а затем SGI. Проект под названием STLPort, основанный на SGI STL, осуществляет постоянное обновление STL, Iostream и строковых классов. Некоторые другие проекты также занимаются разработкой частных применений стандартной библиотеки для различных конструкторских задач. Каждый производитель компиляторов C++ обязательно поставляет какую-либо реализацию этой библиотеки, так как она является очень важной частью стандарта и широко используется. Архитектура STL была разработана Александром Степановым.
Класс – это сложный тип данных, в котором объединены элементы данных (поля) и методы, обрабатывающие эти данные и выполняющие операции по взаимодействию с окружающей средой.
Объект (или экземпляр класса) – это представитель класса, построенный по хранящемуся в классе описанию.
Объекты (экземпляры классов), как и любые другие значения допустимых типов, хранятся в программе в переменных объектных типов.
Инкапсуляция – механизм объединения данных и методов для их обработки, для защиты от внешнего вмешательства и от неверного использования.
Объект – конструкция, поддерживающая инкапсуляцию. Объект может содержать данные и методы в любой из секций ограничения доступа:
— private: доступны самому объекту (Obj) и друзьям (Friend);
— protected: доступны самому объекту, друзьям и потомкам (Child);
— public: доступны самому объекту и всем остальным (вкл. AnyObj