Освой самостоятельно C++ за 21 день, 7-е издание

Освой самостоятельно C++ за 21 день, 7-е издание
Автор: Сиддхартха Рао
Год: 2013
ISBN: 978-5-8459-1825-3
Страниц: 688
Язык: Русский
Формат: PDF
Размер: 13 Мб

Download

Эта книга поможет изучить язык C++11 маленькими шагами. Она специально разделена на отдельные занятия, излагающие основные принципы этого языка объектно-ориентированного программирования с практической точки зрения. Книга начинается с самых основ языка C++. Необходимо лишь желание изучить этот язык и сообразительность, чтобы понять, как он работает.
Уделив всего один час в день вы сможете приобрести квалификацию, достаточную для начала программирования на языке C++. В книге содержится полный курс обучения программированию, который позволит быстро овладеть основами языка и перейти к более сложным понятиям и концепциям. Полностью переработанная под стандарт C++11, эта книга представляет язык с практической точки зрения, помогая узнать то, как использовать язык C++11 для создания более быстрых, простых и эффективных приложений на C++.

+

Первые шаги
Добро пожаловать на страницы седьмого издания книги Освой са­мостоятельно C++ за 21 день! Сегодня начинается долгий путь, кото­рый позволит вам достичь уровня профессионального программиро­вания на языке C++.
На сегодняшнем занятии.

  • Почему язык C++ стал стандартом в области разработки
    программного продукта.
  • Как набрать, откомпилировать и скомпоновать первую рабочую
    программу C++.
  • Что нового в С++11.

 

Краткий экскурс в историю языка C++

Задача языка программирования в том, чтобы упростить использование вычислитель­ных ресурсов. Язык C++ отнюдь не нов, но он еще весьма популярен и продолжает со­вершенствоваться. Последняя версия языка C++, принятая международным комитетом по
стандартам ISO Standards Committee в 2011 называется С++11.

Связь с языком С

Первоначально разработанный Бьярне Страуструпом в 1979 году, язык C++ был заду­ман как преемник языка С. С — процедурный язык, где каждая функция предпринимает определенное действие. Язык C++, напротив, был задуман как объектно-ориентированный, но он реализует такие концепции, как наследование, абстракция, полиморфизм и инкап­суляция. Классы языка C++ используют свойства для содержания данных и методы для обработки этих данных. (Методы являются аналогом функций в языке С.) В результате программист больше думает о данных и о том, что с ними следует сделать. Компиляторы C++ традиционно поддержали также программы на языке С. Преимуществом этого была совместимость с устаревшим кодом, а недостатком — чрезвычайно высокая сложность компиляторов, вынужденных обеспечивать программистам эту совместимость, одновре­менно реализуя все новые средства, которых требует развитие языка.

Преимущества языка C++

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

Несмотря на наличие более новых языков программирования, таких как Java, и язы­ков на платформе .NET, язык C++ остается популярным и продолжает развиваться. Более новые языки предоставляют определенные средства, такие как управление памятью за счет сбора “мусора”, реализованное в компоненте исполняющей среды, которые нравятся некоторым программистам. Однако там, где нужен подробный контроль за производи­тельностью создаваемого приложения, эти же программисты все еще выбрали бы языкC++. Многоуровневая архитектура, где веб-сервер создается на языке C++, а пользова­тельская часть приложения на HTML, Java или .NET, является в настоящее время вполне обыденной.

Развитие стандарта C++

Годы развития сделали язык C++ весьма популярным, хоть и существующем во мно­гих разных формах из-за множества различий компиляторов, каждый из которых имеет собственные особенности. Эта популярность и различия в доступных версиях привели
к большому количеству проблем совместимости и переносимости кода. Следовательно, появилась потребность стандартизировать все это.

В 1998 году первая стандартная версия языка C++ была ратифицирована международ­ной организацией по стандартизации ISO Committee в виде стандарта ISO/IEC 14882:1998. Затем, в 2003 году, последовала версия ISO/IEC 14882:200). Текущая версия стандарта языка C++ была ратифицирована в августе 2011 года. Официально она называется С++11 (ISO/IEC 14882:2011) и содержит некоторые из самых честолюбивых и прогрессивных изменений, которые когда-либо видел стандарт.

ПРИМЕЧАНИЕ

Многие документы в Интернете все еще ссылаются на версию языка С++0х. Ожидалось, что новый стандарт будет ратифицирован в 2008 или 2009 году, а знак х использовался как обозначение года. И наконец, в августе 2011 года был предложен и принят новый стандарт и соответственно назван С++11. Другими словами, С++11 является новым стандартом C++ Ох.

Кто использует программы, написанные на C++?

Независимо от того, кто вы или что вы делаете — закаленный программист или тот, кто использует компьютер для определенных целей, — вы постоянно используете прило­жения и библиотеки C++. Это операционные системы, драйверы устройств, офисные при­ложения, веб-серверы, приложения на базе облака (сетевой среды), поисковые механизмы и даже некоторые из более новых языков программирования, для создания которых, как правило, выбирают язык C++.

Создание приложения C++

Когда вы запускаете Блокнот (Notepad) или редактор v i на своем компьютере, вы фак­тически указываете процессору запустить исполняемый файл этой программы. Исполняе­мый файл (executable) — это готовый продукт, который может быть запущен и должен сделать то, чего намеревался достичь программист.

Этапы создания исполняемого файла
Написание программы C++ является первым этапом создания исполняемого файла, ко­торый в конечном счете может быть запущен на вашей операционной системе. Основные этапы создания приложений C++ приведены ниже.

  1. Написать (или запрограммировать) код C++, используя текстовый редактор.
  2.  Откомпилировать код, используя компилятор C++, который преобразовывает его в версию машинного языка и запишет в объектный файл(object file).
  3.  Скомпоновать результат работы компилятора, используя компоновщик, и получить исполняемый файл ( .ехе в Windows, например).

Обратите внимание, что микропроцессор не может использовать текстовые файлы, ко­торые вы, по существу, и создаете, когда пишете программы. Компиляция(compilation) — этап, на котором код C++, содержащийся обычно в текстовых файлах с расширением . ср р , преобразуется в бинарный код, который может быть понят процессором. Компилятор (compiler) преобразует по одному файлу кода за раз, создавая объектный файл с расширением .о или .obj и игнорируя зависимости, которые код в этом файле может иметь с кодом в другом файле. Распознавание этих зависимостей и объединение кода является задачей компоновщика (linker). Кроме объединения различных объектных файлов, он устанавливает зависимости и в случае успешной компоновки создает испол­няемый файл, который можно выполнять и в конечном счете распространять.

Анализ и устранение ошибок

Большинство сложных приложений, особенно разработанных коллективом програм­мистов, редко компилируются и начинают хорошо работать сразу. Большое или сложное приложение, написанное на любом языке (включая C++), зачастую требует множества за­пусков и перезапусков, чтобы проанализировать проблемы и обнаружить ошибки. Затем ошибки исправляются, программа перекомпилируется и процесс продолжается. Таким образом, кроме трех этапов (программирование, компиляция и компоновка), разработка зачастую подразумевает этап отладки(debugging), на котором программист анализирует аномалии и ошибки в приложении, используя инструментальные средства просмотра и отладчики, а также построчное выполнение.

Интегрированная среда разработки

Большинство программистов предпочитают использовать интегрированную среду раз­работки(Integrated Development Environment — IDE), объединяющую этапы программи­рования, компиляции и компоновки в пределах единого пользовательского интерфейса,
предоставляющего также средства отладки, облегчающие обнаружение ошибок и устра­нение проблем.

СОВЕТ
Ныне доступно множество бесплатных интегрированных сред разработки и компиляторов C++. Наиболее популярные – Microsoft Visual C++ Express для Windows и GNU C++ Compiler (называемый также g++) для Linux. Если вы про­граммируете на Linux, то можете установить бесплатную интегрированную среду разработки Eclipse для разработки приложений C++ с использованием компи­лятора g++.

ВНИМАНИЕ!
Хотя на момент написания этой книги ни один из компиляторов не поддержи­вал стандарт C++ И полностью, большинство его основных средств вышеупо­мянутыми компиляторами уже поддерживалось.

Рекомендуется

Используйте для создания исходного кода либо простой текстовый редактор, такой как Блокнот или gedit, либо интегрированную сре­ду разработки Сохраняйте свои файлы исходного кода в фай­лах с расширением . срр

Не рекомендуется

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

Создание первого приложения C++

Теперь, когда известны инструментальные средства и задействованные этапы, пришло время создать первое приложение C++, которое по традиции выводит на экран текст Hello world! (“Привет, мир!”).

Если вы работаете под управлением операционной системы Windows и используете IDE Microsoft Visual C++ Express, то можете следовать этапам, описанным ниже.

  1.  Создайте новый проект, используя пункт меню File-> New->  Project (Файл-> Новый-> Проект).
  2.  Выберите тип Win32 Console Application (Консольное приложение Win32) и сбросьте флажок Use Precompiled Header (Использовать предварительно скомпи­лированный заголовок).
  3. Назовите проект Hello и замените автоматически созданное содержимое в файле Hello. срр фрагментом кода, представленным в листинге 1.1. Если вы работаете на Linux, для создания файла . срр с таким содержимым, как в ли­стинге 1.1,используйте простой текстовый редактор (я на Ubuntu использовал gedit).

ЛИСТИНГ  Программа Hello World (файл Hello. срр)

1: #include <iostream>
2 :
3: int main()
4: {
5: std::cout << “Hello World!” « std::endl;
6: return 0;
7: }

Это простое приложение всего лишь выводит на экран строку, используя оператор std::cout. Оператор std::endi указывает объекту потока cout закончить строку, а опе­ратор return о обеспечивает завершение работы приложения и возврат операционной системе кода 0.

ПРИМЕЧАНИЕ
Понять программу при чтении будет легче, если знаешь, как произносятся спе­циальные символы и ключевые слова. Например, директиву #inciude можно прочитать как hash-include (хеш инклюд), или как sharp-include (шарп инклюд), или как pound-include (фунт инклюд), в зависимости от ваших привычек. Аналогично оператор std:: cout можно прочитать как standard-c-out (стандард-
си-аут).

ВНИМАНИЕ!
Помните, дьявол – в деталях, значит, код необходимо вводить точно так же, как он представлен в листинге. Компиляторы известны своей придирчивостью. Если вы по ошибке поместите в конце оператора :, где ожидается ;, то весь ад, безусловно, разверзнется!

Создание и запуск вашего первого приложения C++

Если вы используете IDE M icrosoft Visual C++ Express, нажмите для запуска програм­мы непосредственно в интегрированной среде разработки комбинацию клавиш <Ctrl+5>. В результате программа будет откомпилирована, скомпонована и запущена на выполнение. Эти же этапы можно также пройти индивидуально.

  1. Щелкните правой кнопкой мыши на проекте и в появившемся контекстном меню выберите пункт Build, чтобы создать исполняемый файл.
  2. Используя приглашение к вводу команд, перейдите по пути исполняемого файла (обычно это каталог Debug папки проекта).
  3. Запустите приложение, введя имя его исполняемого файла. В среде разработки M icrosoft Visual C++ ваша программа будет выглядеть примерно так, как показано на рис. 1.1.

При работе под Linux вызовите компилятор g++ и компоновщик, используя следующую командную строку: g++ -о hello Hello.epp
Ввод этой строки приказывает компилятору g++ создавать исполняемый файл hello и откомпилировать файл исходного кода C++ Hello.срр. Запуск файла . \hello на Linux или Hello.ехе на Windows даст следующий вывод:
Hello World!
Поздравляю! Вы начали свой путь к изучению одного из самых популярных и мощных языков программирования!

Значение стандарта C++ ISO
Как можно заметить, соответствие стандарту позволяет компилировать и выполнять фраг­мент кода из листинга 1.1 на нескольких платформах или операционных системах — это преимущество соответствующего стандарту компилятора C++. Таким образом, если не­обходимо создать продукт, который способен выполняться как на операционной системе Windows, так и на Linux, например, то совместимые со стандартом практики программи­рования (которые не подразумевают использование семантики или компилятора, спец­ифического для конкретной платформы) предоставят недорогой способ завоевать более широкую аудиторию пользователей без необходимости создавать специальную версию программы для каждой среды. Это, безусловно, прекрасно подходит для приложений, ко­торые не нуждаются в частом взаимодействии на уровне операционной системы.

Понятие ошибок компиляции
Компиляторы крайне педантичны в своих требованиях, но, тем не менее, предпринима­ют определенные усилия, чтобы оповестить вас о сделанных ошибках. Если вы столкну­лись с проблемой при компиляции приложения в листинге 1.1, то сообщ ение об ошибке,
вероятней всего, будет похоже на следующее (автор преднамеренно убрал точку с запятой в строке 5):
hello.срр(6): error С2143: syntax error : missing before ‘return’
Это сообщ ение об ош ибке от компилятора Visual C++ весьма описательно: оно ука­зывает имя файла, в котором содержится ошибка, номер строки (в данном случае 6), где пропущена точка с запятой, и описание самой ошибки, предваряемое номером ошибки (в данном случае С2143). Хотя знак препинания был удален из пятой строки кода приме­ра, в сообщении об ошибке упоминается следующая строка, поскольку для компилятора ошибка стала очевидной, только когда он проанализировал оператор return и понял, что предыдущий оператор должен был быть закончен перед переходом к оператору return. Можете попробовать добавить точку с запятой в начале шестой строки, и программа будет прекрасно откомпилирована!

ПРИМЕЧАНИЕ
Здесь конец строки не считается автоматически концом оператора, как в не­которых других языках, таких как VBScript. В C++ оператор может распространяться на несколько строк кода

Что нового в С++11
Если вы опытный программист C++, то, вероятно, уже обратили внимание на то, что в примере программы C++ из листинга 1.1 ни один бит не изменился. Хотя язык С++11 о ста­ется полностью совместимым с предыдущ ими версиями языка C++, на самом деле при создании языка было проделано очень много работы, чтобы упростить его использование. Такое средство, как ключевое слово auto, позволяет определить переменную, тип кото­рой компилятор выясняет автоматически, уплотняя многословные объявления (например, итератора) и не нарушая безопасность типов. Лямбда-функции — это функции без имени. Они позволяют писать компактные объекты функций без длинных определений класса, значительно сокращая строки кода. Стандарт C++11 обещал программистам способность писать переносимые, многопоточные и все же соответствующие стандарту приложения C++. Эти приложения, при правильном построении, поддерживают парадигму параллель­ного исполнения и хорошо позиционируются как масштабируемые по производительно­сти, когда пользователь наращивает возможности своих аппаратных средств, увеличивая
количество ядер процессора.
Это лишь некоторые из многих преимуществ языка С + + 1 1, обсуждаемых в этой книге.

Резюме
На этом занятии вы узнали, как написать, откомпилировать, скомпоновать и выполнить вашу первую программу C++. Здесь приведен также краткий обзор развития языка C++ и продемонстрирована эффективность стандарта на примере того, как та же программа может быть откомпилирована с использованием разных компиляторов на разных опера­ционных системах.

Вопросы и ответы

  • Могу ли я игнорировать предупреждающие сообщения компилятора? В некоторых случаях компиляторы выдают предупреждающие сообщения. Предупрежде­ния отличаются от ошибок тем, что рассматриваемая строка синтаксически правильна и вполне компилируема. Но, возможно, есть лучший способ написать данный код, и хоро­шие компиляторы выдают предупреждение об этом с рекомендацией по исправлению. Предложенное исправление может означать более безопасный способ программирова­ния или способ, позволяющий вашему приложению работать с символами и буквами не латинских языков. Вы должны учесть эти предупреждения и улучшить свою програм­му соответственно. Не игнорируйте предупреждаю щ ие сообщ ения, если не уверены абсолютно, что они ошибочны.
  • Чем интерпретирующий язык отличается от компилирующего? Интерпретаторами являются такие языки, как Windows Script. У них нет этапа компи­ляции. И нтерпретирующий язык использует интерпретатор, который читает текстовый файл сценария (код) и выполняет желаемые действия. Поэтому на машине, где должен быть выполнен сценарий, необходимо установить интерпретатор; следовательно, стра­дает производительность, поскольку интерпретатор работает как транслятор времени
    выполнения, расположенный между микропроцессором и написанным кодом.
  • Что такое ошибки времени выполнения и чем они отличаются от ошибок време­ни компиляции? Ошибки, которые появляются при выполнении приложения, называются ошибками времени выполнения (runtim e error). Возможно, вам встречалось сообщ ение “A ccess Violation” в старых версиях Windows, являющееся оповещением об ошибке времени
    выполнения программы. Сообщения об ошибках компиляции не доходят до конечного пользователя и являются свидетельством синтаксических проблем; они не позволяют программисту создать исполняемый файл.