Последнее обновление: 28.08.2017
Язык программирования С++ представляет высокоуровневый компилируемый язык программирования общего назначения со статической типизацией, который подходит для создания самых различных приложений. На сегодняшний день С++ является одним из самых популярных и распространенных языков.
Своими корнями он уходит в язык Си, который был разработан в 1969—1973 годах в компании Bell Labs программистом Деннисом Ритчи (Dennis Ritchie). В начале 1980-х годов датский программист Бьерн Страуструп (Bjarne Stroustrup), который в то время работал в компании Bell Labs, разработал С++ как расширение к языку Си. Фактически вначале C++ просто дополнял язык Си некоторыми возможностями объектно-ориентированного программирования. И поэтому сам Страуструп вначале называл его как «C with classes» («Си с классами»).
Впоследствии новый язык стал набирать популярность. В него были добавлены новые возможности, которые делали его не просто дополнением к Си, а совершенно новым языком программирования. В итоге «Си с классами» был переименован в С++. И с тех по оба языка стали развиваться независимо друг от друга.
С++ является мощным языком, унаследовав от Си богатые возможности по работе с памятью. Поэтому нередко С++ находит свое применение в системном программировании, в частности, при создании операционных систем, драйверов, различных утилит, антивирусов и т.д. К слову сказать, ОС Windows большей частью написана на С++. Но только системным программированием применение данного языка не ограничивается. С++ можно использовать в программах любого уровня, где важны скорость работы и производительность. Нередко он применяется для создания графических приложений, различных прикладных программ. Также особенно часто его используют для создания игр с богатой насыщенной визуализацией. Кроме того, в последнее время набирает ход мобильное направление, где С++ тоже нашел свое применение. И даже в веб-разработке также можно использовать С++ для создания веб-приложений или каких-то вспомогательных сервисов, которые обслуживают веб-приложения. В общем С++ — язык широкого пользования, на котором можно создавать практически любые виды программ.
С++ является компилируемым языком, а это значит, что компилятор транслирует исходный код на С++ в исполняемый файл, который содержит набор машинных инструкций. Но разные платформы имеют свои особенности, поэтому скомпилированные программы нельзя просто перенести с одной платформы на другую и там уже запустить. Однако на уровне исходного кода программы на С++ по большей степени обладают переносимостью, если не используются какие-то специфичные для текущей ос функции. А наличие компиляторов, библиотек и инструментов разработки почти под все распространенные платформы позволяет компилировать один и тот же исходный код на С++ в приложения под эти платформы.
В отличие от Си язык C++ позволяет писать приложения в объектно-ориентированном стиле, представляя программу как совокупность взаимодействующих между собой классов и объектов. Что упрощает создание крупных приложений.
В 1979-80 годах Бьерн Страуструп разработал расширение к языку Си — «Си с классами». В 1983 язык был переименован в С++.
В 1985 году была выпущена первая коммерческая версия языка С++, а также первое издание книги «Языка программирования C++», которая представляла первое описание этого языка при отсутствии официального стандарта.
В 1989 была выпущена новая версия языка C++ 2.0, которая включала ряд новых возможностей. После этого язык развивался относительно медленно вплоть до 2011 года. Но при этом в 1998 году была предпринята первая попытка по стандартизации языка организацией ISO (International Organiztion for Standartization). Первый стандарт получил название ISO/IEC 14882:1998 или сокращенно С++98. В дальнейшем в 2003 была издана новая версия стандарта C++03.
В 2011 году был издан новый стандарт C++11, который содержал множество добавлений и обогащал язык С++ большим числом новых функциональных возможностей. После этого в 2014 году было выпущено небольшое добавление к стандарту, известное также как C++14. И еще один ключевой релиз языка намечен на 2017.
Для разработки программ на С++ необходим компилятор — он транслирует исходный код на языке С++ в исполняемый файл, который затем можно запускать. Но в настоящий момент есть очень много различных компиляторов. Они могут отличаться по различным аспектам, в частности, по реализации стандартов. Базовый список компиляторов для С++ можно посмотреть в википедии. Рекомендуется для разработки выбирать те компиляторы, которые развиваются и реализуют все последние стандарты. Так, на протяжении всего руководства преимущественно будет использоваться свободно распространяемый компилятор g++, разработанный в рамках проекта GNU.
Также для создания программ можно использовать интегрированные среды разработки IDE, такие как Visual Studio, Netbeans, Eclipse, Qt и т.д.
metanit.com
C был создан для использования в операционной системе UNIX. С тех пор он был перенесен на многие другие операционные системы и стал одним из самых используемых языков программирования. Си ценят за его эффективность. Он является самым популярным языком для создания системного программного обеспечения. Его также часто используют для создания прикладных программ. Несмотря на то, что C не разрабатывался для новичков, он активно используется для обучения программированию.
C++ (Си++, Си плюс плюс) — язык программирования высокого уровня, созданный в 1985 Бьёрном Страуструпом (Bjarne Stroustrup) как объектно-ориентированная усовершенственная версия популярного языка C. Одним из принципов разработки было сохранение совместимости с C. Тем не менее, C++ не является в строгом смысле надмножеством Си; множество программ, которые могут одинаково успешно транслироваться как компиляторами Си, так и компиляторами C++, довольно велико, но не включает все возможные программы на C.
В 90-х годах язык C++ стал одним из самых популярных средств разработки программного обеспечения, что связано с его родством с языком C и широкими возможностями. C++ используется для разработки программного обеспечения, являясь одним из самых популярных языков программирования. Область его применения включает создание операционных систем, разнообразных прикладных программ, драйверов устройств, приложений для встраиваемых систем, высокопроизводительных серверов, а также игр.
В связи с успехом языка C++ многие корпорации стали обильно выпускать свои компиляторы и среды разработки как бесплатные, так и коммерческие и для различных платформ. Например, на платформе x86 это (GCC, Borland C++ Builder, Microsoft Visual C++, Bloodshed Dev-C++, Intel C++ Compiler, Borland Turbo C/C++ и т.д)
C++ оказал огромное влияние на другие языки программирования, в первую очередь на Java и C#. Также стоит отметить, что в последние годы C++ сдает свои позиции именно в пользу этих языков.
softcreate.narod.ru
Это статья о том, почему же все-таки стоит выбрать C++ в качестве первого языка программирования для обучения студентов, и немного о проблемах преподавания в ВУЗах. Часть суждения, касающегося процесса обучения, основывается на личном опыте преподавания (три года, во время учёбы в аспирантуре), а также на общении с преподавателями и студентами.
Компилятор. Тут C++ предстаёт во всей красе. Множество компиляторов, консольные команды, этапы сборки программы… Да, первую программу нужно написать в простом текстовом редакторе без подсветки синтаксиса и автокомплита, найти чем и как её можно запустить. Такой подход формирует у человека некоторое понимание того, как всё устроено:
Статическая типизация. На примере языка со статической типизацией проще понять, что такое тип данных, зачем он нужен и от чего зависит. Видно, что собой представляет объявление, определение и инициализация. Использование языка C++ даёт это явно увидеть, что способствует дальнейшему пониманию того, как работают эти механизмы в других языках. Помимо этого можно на реальных примерах понять, чем беззнаковые целые отличаются от целых со знаком, чем отличаются числа двойной и одинарной точности, чем отличается символ от строки и т.д.
Высокоуровневые и низкоуровневые средства. Использование таких средств, как указатели и динамическое выделение памяти, позволяет понять (или в дальнейшем способствует пониманию), что такое стэк, куча, стэк вызовов, раскрутка стэка и т.д. Помимо этого, на практике закрепляется понимание концепции адресов и адресной арифметики. На примерах демонстрируется, что память надо выделять, освобождать, потому что она не бесконечная, что существуют утечки памяти. В будущем, при изучении языков с GC проще будет понять, что же это такое.
Отдельно стоит отметить простой механизм передачи значений по ссылке, значению, указателю и перенос объекта. Что такое изменяемые и не изменяемые параметры. В дальнейшем данные концепции могут быть использованы и при изучении других языков. Студент будет понимать, например, что объект в языке N передаётся по ссылке, и если его значение изменить в функции-члене, то оно изменится везде.
Реализация ООП. Это относительно чистая реализация ООП без всякого синтаксического сахара (относительно некоторых других языков). Чётко разграниченные уровни доступа к членам класса, возможность множественного наследования и динамический полиморфизм дают возможность быстро усвоить основные концепции ООП (абстракция, наследование, инкапсуляция и полиморфизм). Указатели и динамическое выделение памяти позволяют наглядно понять такие важные механизмы, как upcasting и downcasting. В дальнейшем, основываясь на этих знаниях, легко можно понять весь синтаксический сахар в других языках. Необходимость контроля ресурсов (в том числе и «правило трёх» или уже «правило пяти», с учётом C++11), захват их в конструкторе и освобождение в деструкторе также способствуют более глубокому пониманию ООП.
Стоит отметить такой важный момент, как не принудительное ООП. То есть данный подход к программированию применяется тогда, когда это удобно, и его можно смешивать, например, с функциональным программированием. Это способствует формированию понимания того, что средства реализации выбираются исходя из задачи.
STL. Сама по себе концепция шаблонов C++, генерации кода и применения широкого спектра алгоритмов к различным контейнерам положительно влияет на процесс обучения. Здесь все на поверхности и понятно, почему можно создать вектор целых чисел и вектор пользовательских объектов на основе одного класса-контейнера. Почему можно применить некоторую операцию к последовательности объектов или как отсортировать объекты, для которых не предусмотрена встроенная операция сравнения. Можно понять, как осуществляется доступ к элементам, и узнать о категориях итераторов. Помимо этого закрепляется понимание обобщённого программирования.
habr.com
Структура — это частный случай класса. Можно пользоваться следующими правилами:
• если необходимо отнести класс к развернутому типу, делайте его структурой;
• если у класса число полей относительно невелико, а число возможных объектов относительно велико, делайте его структурой. В этом случае память объектам будет отводиться в стеке, не будут создаваться лишние ссылки, что позволит повысить эффективность работы;
• в остальных случаях проектируйте настоящие классы.
Синтаксис объявления структуры аналогичен синтаксису объявления класса:
[атрибуты][модификаторы]struct имя_структуры[:список_интерфейсов]
{тело_структуры}
Перечисление — это частный случай класса, класс, заданный без собственных методов. Перечисление задает конечное множество возможных значений, которые могут получать объекты класса перечисление. Поскольку у перечислений нет собственных методов, то синтаксис объявления этого класса упрощается — остается обычный заголовок и тело класса, содержащее список возможных значений. Вот формальное определение синтаксиса перечислений:
[атрибуты][модификаторы]enum имя_перечисления[:базовый класс]
{список_возможных_значений}
Объектно-ориентированное программирование и проектирование построено на классах. Любую программную систему, выстроенную в объектном стиле, можно рассматривать как совокупность классов, возможно, объединенных в проекты, пространства имен, решения, как это делается при программировании в Visual Studio .Net.
У класса две различные роли: модуля и типа данных. Класс — это модуль, архитектурная единица построения программной системы. Модульность построения — основное свойство программных систем. В ООП программная система, строящаяся по модульному принципу, состоит из классов, являющихся основным видом модуля.
Вторая роль класса не менее важна. Класс — это тип данных, задающий реализацию некоторой абстракции данных, характерной для задачи, в интересах которой создается программная система. С этих позиций классы — не просто кирпичики, из которых строится система. Каждый кирпичик теперь имеет важную содержательную начинку.
Начнем с синтаксиса описания класса:
[атрибуты][модификаторы]class имя_класса[:список_родителей]
{тело_класса}
Каждое поле имеет модификатор доступа, принимающий одно из четырех значений: public, private, protected, internal. Атрибутом доступа по умолчанию является атрибут private. Если поля доступны только для методов класса, то они имеют атрибут доступа private, который можно опускать. Такие поля считаются закрытыми, но часто желательно, чтобы некоторые из них были доступны в более широком контексте. Если некоторые поля класса A должны быть доступны для методов класса B, являющегося потомком класса A, то эти поля следует снабдить атрибутом protected. Такие поля называются защищенными. Если некоторые поля должны быть доступны для методов классов B1, B2 и так далее, дружественных по отношению к классу A, то эти поля следует снабдить атрибутом internal, а все дружественные классы B поместить в один проект (assembly). Такие поля называются дружественными. Наконец, если некоторые поля должны быть доступны для методов любого класса B, которому доступен сам класс A, то эти поля следует снабдить атрибутом public. Такие поля называются общедоступными или открытыми.
Методы класса синтаксически являются обычными процедурами и функциями языка.
studfiles.net
С —компилируемый, процедурный, стандартизированный язык программирования. C++ — это объектно-ориентированный язык программирования, соответствующий стандартам ANSI и ISO. Он характеризуется лаконичностью и обширным набором операций. C++ разработан на основе языка С.
Этот язык программирования часто называют «языком низкого уровня», потому что он максимально приближен к аппаратной части компьютера. В этом он уступает только Ассемблеру. Поддерживает объектно-ориентированную, процедурную, и обобщенную парадигмы программирования. Если же вас интересует веб программирование с движками, то советую начать с WordPress. Ведь это самая лучшая система управления контентом. Тем более что лучшие учебники по WordPress сегодня доступны каждому. Настоятельно рекомендую каждому, кто хочет получить новые знания, или улучшить уже существующие.
Иногда язык Си называют «ассемблером высокого уровня». Имеется в виду его максимальная приближенность к Ассемблеру. Но Ассемблеры для разных компьютеров специфичны для конкретной архитектуры, ОС и варианта синтаксиса языка. В отличии от них программа на Си может быть скомпилирована (часто без изменений) практически для любой ОС и архитектуры. Программы, написанные на С, обладают высоким быстродействием. Быстрее работают только программы, которые написаны и оптимизированы на Ассемблере.
Си++ универсален. С его помощью решаются практически все задачи программирования. Однако, для одних задач он употребляется чаще, для других – реже. На нем можно писать эффективные программы для любых целей.
Так где же применяется С++? Область его применения неимоверно широка. Давайте перечислим только несколько сфер использования этого языка: в системном программировании (преемник языка Си). На Си написаны ядра Windows и UNIX. На нем же написан WinAPI. Язык программирования применяется для создания операционных систем, разработки прикладных программ: конструкторских, например, САПР «Компас»; текстовых редакторов; бухгалтерских (1С) и т.д. Кроме того, C++ применяется для разработки языков программирования и их обновлений, разработки драйверов устройств, создания высокопроизводительных веб-серверов (например, nginx), создании игр и всевозможных развлекательных приложений, для обучения программированию.
Программирование микроконтроллеров, например, язык С-51 для микроконтроллера MCS-51 и другие. Управление микроконтроллерами – достаточно обширная область применения. Язык программирования С-51 предназначен для написания компактных программ. Скорость работы и компактность таких программ сравнима с написанными на языке Ассемблер.
Разработка графических пользовательских интерфейсов на С++ выполняется, в основном, для сложных и нестандартных интерфейсов. Зачастую для разработки приложений на этом языке используются фреймворки, например, WxWidgets и Qt. С помощью которых можно разрабатывать приложения под различные операционные системы, а самое главное их не придется перереписывать и «затачивать» под определенную ОС.
joomlasecret.ru
Я хотел бы поделиться общей техникой, которую я использовал, чтобы узнать, как работают указатели, когда я начинаю. Если вы примените его к своей проблеме, вы увидите ответ как простой, как день.
Получите большой лист графической бумаги и положите его вдоль стола перед собой. Это ваша память компьютера. Каждый ящик представляет собой один байт. Выберите строку и поместите номер «100» под полем слева. Это «самый низкий адрес» памяти. (Я выбрал 100 как произвольное число, которое не равно 0, вы можете выбрать другое.) Поместите поля в порядке возрастания слева направо.
+---+---+---+---+---+-- | | | | | | ... +---+---+---+---+---+-- 100 101 102 103 104 ...
Теперь, на данный момент, сделайте вид, что int — один байт. Вы восьмибитовый компьютер. Напишите int a
в один из полей. Номер под полем — его адрес. Теперь выберите другой блок, содержащий int *b = &a
. int *b
также является переменной, хранящейся где-то в памяти, и это указатель, содержащий &a
, который произносится как «адрес».
int a = 5;
int *b = &a;
a b +---+---+---+---+---+-- | 5 | |100| | | ... +---+---+---+---+---+-- 100 101 102 103 104 ...
Теперь вы можете использовать эту модель для визуальной работы с любыми другими комбинациями значений и указателей, которые вы видите. Это упрощение (потому что, как говорят слова педанты, указатель не обязательно является адресом, а память не обязательно последовательна, а там стек, куча и регистры и т.д.), Но это довольно хорошая аналогия для 99% компьютеров и микроконтроллеров.
Итак, в вашем случае
int x = 35;
int y = 46;
x y +---+---+---+---+---+-- | 35| 46| | | | ... +---+---+---+---+---+-- 100 101 102 103 104 ...
int *p = &x;
int *q = &y;
x y p q +---+---+---+---+---+-- | 35| 46|100|101| | ... +---+---+---+---+---+-- 100 101 102 103 104 ...
p = q;
x y p q +---+---+---+---+---+-- | 35| 46|101|101| | ... +---+---+---+---+---+-- 100 101 102 103 104 ...
*p = 90;
x y p q +---+---+---+---+---+-- | 35| 90|101|101| | ... +---+---+---+---+---+-- 100 101 102 103 104 ...
Теперь что такое *p
? Что такое *q
?
qaru.site