Баннер мобильный (1) Пройти тест

Язык программирования C++: разбираемся и пишем простую программу

Как появился язык С++, чем он отличается от других и с чего начать его учить

Разбор

3 марта 2024

Поделиться

Скопировано
Язык программирования C++: разбираемся и пишем простую программу

Содержание

    Разбираемся, кому и для чего подходит C++, какие инструменты для работы с ним самые востребованные. Устанавливаем и настраиваем базовые инструменты, а также пробуем написать и запустить простую программу. В конце статьи — список полезных ресурсов для новичков, которые помогут понять, насколько вам подходит язык.

    Кто создал C++

    Билл Гейтс начал программировать в школьные годы, обучаясь в привилегированной школе. Марк Цукерберг в десять лет получил в подарок компьютер и начал изучать программирование. 

    У автора языка C++ Бьерна Страуструпа старт не был блестящим. Его родители были бедны. Он учился в худшей школе города. Он не знал, в какой области развиваться. Страуструп как-то признался, что попал на курс информатики в университете по ошибке, перепутав его с математикой. Ошибка стала большим везением как для самого Бьерна, так и для множества программистов со всего мира.

    https://www.youtube.com/watch?v=OQZhHHq3p1I&t=3s&ab_channel=Honeypot

    В 80-е годы Страуструпу понадобилось написать программу моделирования распределенных вычислений для фирмы Bell Labs. К тому времени он изучил более двадцати языков программирования, но ни один не подходил для задачи.

    Тогда он решил разработать объектно-ориентированный язык на основе синтаксиса Си. В 1985 году он презентовал свою разработку в книге «Язык программирования C++». 

    В чем отличие C++ от других языков 

    C++ используют в финтехе, разработке игр, для создания программ разной сложности: от простых утилит до масштабных систем. C++ сложно назвать языком для новичков, в простоте он уступает популярному Python. Однако у C++ есть особенности, которые делают его более гибким.

    Большие возможности и большая ответственность. Многие современные языки, такие как C#, Java, Ruby обеспечивают управление памятью и проверки безопасности без участия программиста, на уровне компилятора. Но Страуструп считает это не преимуществом, а уязвимостью, от которой страдает и безопасность, и быстродействие. В C++ все контролирует автор программы.

    Объектно-ориентированность. Концепция ООП была реализована еще в Simula67. Но по-настоящему популярным подход стал благодаря работам Страуструпа.

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

    Основы синтаксиса C++ 

    Программа состоит из инструкций. Инструкция (statement) выполняет какое-то действие. После инструкции в C++ ставится знак «;».

    Например:

    std::cout << "мой текст"; 

    Несколько инструкций, заключенных в фигурные скобки, составляют блок кода:

    {                          
    
        std::cout << "мой текст";    
    
        std::cout << "еще текст";                       
    
    }

    Здесь cout — это стандартный выходной поток. В C++ нет готовых средств ввода-вывода, для этого используют объектно-ориентированную библиотеку iostream.

    Чтобы компилятор подключил библиотеку, требуется директива:

    #include <iostream> 

    Iostream определяет три стандартных потока:

    • cin — входной поток (stdin в C);
    • cout — выходной поток (stdout в C);
    • cerr — поток вывода сообщений об ошибках (stderr в C).

    Они находятся в пространстве имен (namespace) std. Чтобы использовать их без префикса std::, можно предварительно применить инструкцию: 

    using namespace std;

    Для ввода-вывода переопределены две операции:

    • >> — получить из входного потока;
    • << — поместить в выходной поток.

    Вывод на консоль выглядит так:

    using namespace std;
    cout << значение;                        

    Значение — это данные определенного типа. Тип данных определяет, какие операции с ними можно производить и сколько байт в памяти они занимают. 

    Основные типы данных в C++:

    • int — целочисленный тип данных;
    • float — тип данных с плавающей запятой;
    • double — тип данных с плавающей запятой двойной точности;
    • char — символьный тип данных;
    • bool — логический тип данных

    Попробуем написать «Hello, world!». Программа на C++ обязательно включает функцию main. С нее начинает работу программа. Тело функции — это блок кода. После имени в круглых скобках следует список параметров. Если параметры не нужны, скобки пустые. Функция возвращает значение определенного типа. 

    Так выглядит заголовок функции main без параметров, возвращающей целое число:

    int main()

    В конце тела функции нужен оператор return и возвращаемое значение. Обычно 0 — признак успешного завершения. 

     return 0;         

    Так выглядит программа вывода сообщения «Hello, world!»:

    #include <iostream>              
    using namespace std;
    int main()                          
    {                          
        cout << "Hello world";    
        return 0;                      
    } 
    

    Что нужно для программирования на C++

    Запуск оnline

    Можете набрать в Google «Online-компиляторы для C++» и выбрать любой. Но для многих нужна регистрация, настройки и пр. 

    По ссылке вы попадете сразу на нужную страницу. В окне справа уже будет пример кода вывода приветствия миру: 

    Онлайн компилятор C++

    Нажмите кнопку «Run» — зеленую со стрелочкой слева вверху. В нижней части экрана увидите результат — сообщение «Hello, world!».

    Работа с C++ на локальном компьютере

    Устанавливаем и проверяем компилятор

    Согласно опросу Jetbrains, самый популярный набор компиляторов для разных операционных систем — GCC с компилятором g++ для языка C++.

    Воспользуемся пакетом средств для разработки MSYS2, который включает GCC. Скачаем и запустим msys2-x86_64-20230718.exe:

    Установка компилятора для C++
    Можно оставить каталог установки по умолчанию C:\msys64.

    Выбираем флажки для меню Пуск, и пакет устанавливается. Когда установка закончится, запустится консоль MSYS2.exe, если такой пункт был выбран. Можно запустить usrt_64.exe из папки указанного при установке каталога.

    Чтобы установить набор компиляторов GCC, наберем в консоли команду pacman -S mingw-w64-x86_64-gcc.

    Пакетный менеджер начнет устанавливать пакет компиляторов. Не забудьте ответить Y на запрос:

    Установка компилятора MSYS2

    Желательно сразу установить отладчик. Для этого набираем в консоли MSYS2 команду pacman -S mingw-w64-x86_64-gdb и также отвечаем Y.

    Теперь в каталоге C:\msys64\ucrt64\bin есть файл компилятора g++.exe. Добавляем путь к нему в Переменные среды. В окне поиска в Windows вводим «изменение переменных среды» .

    Настройки переменных среды для C++

    Изменяем переменную Path: добавляем путь C:\msys64\ucrt64\bin. Теперь мы сможем скомпилировать и запустить программу на C++. Создаем файл hello.cpp с текстом нашей программы из прошлого раздела в любом текстовом редакторе:

    #include <iostream>              
    
    using namespace std;
    
    int main()                          
    
    {                          
    
        cout << "Hello world";    
    
        return 0;                      
    
    }

    Помещаем его в папку C:\HELLO_CPP.

    Осталось скомпилировать. Открываем командную строку Windows. Для этого можно ввести текст «командная строка» в окне поиска в Windows. Переходим в нужную папку с помощью команды cd C:\HELLO_CPP и запускаем компиляцию g++ hello.cpp -o hello.

    В первом параметре указан файл с кодом, который надо скомпилировать. У нас получилось готовое приложение, можно его запускать. Набираем hello.

    программа на C в командной строке

    Программа работает!

    Выбираем среду для разработки на C++

    Конечно, набирать весь код в обычном текстовом редакторе и вручную компилировать и запускать неудобно. Потребуется специальное ПО для разработки.

    Спор между сторонниками редакторов кода и IDE не разрешен. Использование редактора более соответствует философии C++, где все контролирует программист. Также встречается мнение, что редактор больше подходит для обучения, позволяет вникнуть в детали. В интернете много обзоров редакторов кода, например этот.

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

    рейтинг редакторов для языка C++
    Согласно опросу Jetbrains 2022 года, среди средств разработки C++ уверенно лидируют редактор кода Visual Studio Code (VS Code) и IDE Visual Studio от Microsoft. Для начала обучения подойдет VS Code.

    Настраиваем Visual Studio Code для C++

    Как скачать и установить Visual Studio Code, рассказываем по ссылке. При установке выбирайте 64-битный System Installer.

    Теперь нужно настроить VS Code для работы с компилятором и отладчиком для C++, которые установили на предыдущем этапе.

    Сначала установите расширение для работы с C++. Нажмите на значок «Extensions» слева и в строке поиска плагинов наберите C++. Убедитесь, что плагин с описанием «C/C++ IntelliSense, debugging, and code browsing» установлен, или установите его, нажав «Install».

    установка расширения для работы с C++

    Закройте программу VS Code и запустите ее из командной строки командой code .. Убедитесь, что в текущей папке создан каталог с настройками .vscode. 

    Теперь нужно создать каталог .vscode в папке C:\HELLO_CPP с исходным кодом, на котором проверяли компилятор. В каталоге создаем файлы настроек в формате JSON. Удобно использовать как редактор VS Code.

    Создание каталога в C++

    Файл tasks.json отвечает за то, чтобы работала комбинация клавиш Ctrl+shift+B для сборки программы. Убедитесь, что указан правильный путь к компилятору g++.exe, который установили с пакетом MSYS2:

    {
    
        "version": "2.0.0",
    
        "tasks": [
    
            {
    
                "type": "shell",
    
                "label": "g++.exe build active file",
    
                "command": "C:/msys64/mingw64/bin/g++.exe",
    
                "args": [
    
                    "-std=c++17",
    
                    "-g",
    
                    "${file}",
    
                    "-o",
    
                    "${fileDirname}\\${fileBasenameNoExtension}.exe"
    
                ],
    
                "options": {
    
                    "cwd": "C:\\msys64\\mingw64\\bin"
    
                },
    
                "problemMatcher": [
    
                    "$gcc"
    
                ],
    
                "group": "build"
    
            },
    
            {
    
                "type": "cppbuild",
    
                "label": "C/C++: g++.exe build active file",
    
                "command": "C:\\msys64\\mingw64\\bin\\g++.exe",
    
                "args": [
    
                    "-fdiagnostics-color=always",
    
                    "-g",
    
                    "${file}",
    
                    "-o",
    
                    "${fileDirname}\\${fileBasenameNoExtension}.exe"
    
                ],
    
                "options": {
    
                    "cwd": "C:\\msys64\\mingw64\\bin"
    
                },
    
                "problemMatcher": [
    
                    "$gcc"
    
                ],
    
                "group": {
    
                    "kind": "build",
    
                    "isDefault": true
    
                },
    
                "detail": "Task generated by Debugger."
    
            }
    
        ]
    
    }

    Файл launch.json отвечает за работу отладчика. Проверьте правильность пути к отладчику gdb.exe:

    {
    
        "version": "0.2.0",
    
        "configurations": [
    
            {
    
                "name": "g++.exe build and debug active file",
    
                "type": "cppdbg",
    
                "request": "launch",
    
                "program": "${fileDirname}\\${fileBasenameNoExtension}.exe",
    
                "args": [],
    
                "stopAtEntry": false,
    
                "cwd": "${workspaceFolder}",
    
                "environment": [],
    
                "externalConsole": false,
    
                "MIMode": "gdb",
    
                "miDebuggerPath": "C:\\msys64\\mingw64\\bin\\gdb.exe",
    
                "setupCommands": [
    
                    {
    
                        "description": "Enable pretty-printing for gdb",
    
                        "text": "-enable-pretty-printing",
    
                        "ignoreFailures": true
    
                    }
    
                ],
    
                "preLaunchTask": "g++.exe build active file",
    
                "internalConsoleOptions": "neverOpen"
    
            }
    
        ]
    
    }

    Файл c_cpp_properties.json отвечает за расположение include-файлов. Также проверьте правильность пути:

    {
    
        "configurations": [
    
            {
    
                "name": "Win32",
    
                "includePath": [
    
                    "${workspaceFolder}/**",
    
                    "C:/msys64/mingw64/include/**"
    
                ],
    
                "defines": [
    
                    "_DEBUG",
    
                    "UNICODE",
    
                    "_UNICODE"
    
                ],
    
                "windowsSdkVersion": "8.1",
    
                "compilerPath": "C:\\msys64\\mingw64\\bin\\g++.exe",
    
                "cStandard": "c11",
    
                "cppStandard": "c++17",
    
                "intelliSenseMode": "gcc-x86"
    
            }
    
        ],
    
        "version": 4
    
    }

    Пробуем запустить ранее созданный код из hello.cpp. Открываем файл. Разворачиваем список возле стрелки справа вверху и выбираем режим запуска без отладки — Run C/C++ File.

    Запуск кода в C++

    Теперь нажмем на стрелку, и программа выполнится.

    Выбираем режим отладки Debug C/C++ File, нажимаем на значок отладки слева, чтоб включить панель отладки, и запускаем снова. Отлично, отладчик тоже работает. 

    Запуск отладчика C++

    Ресурсы для изучения C++

    В интернете много ресурсов для самостоятельного изучения основ C++.

    Основы C++ от Академии Яндекса — на курсе рассматривают базовые конструкции, стандартную библиотеку и идиомы C++. По каждой теме есть разбор задач.

    В более подробном руководстве по языку C++ есть информация про основы синтаксиса, указатели, функции, работу со строками, алгоритмами и контейнерами.

    В этом обзорном уроке за час разбирают темы переменных, операторов и циклов в C++.

    Если хотите разобраться подробно и начать с основ, почитайте книги автора языка Бьерна Страуструпа:

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

    Разбор

    Поделиться

    Скопировано
    0 комментариев
    Комментарии