Основы C++: Быстрый старт для новичков

Этот курс познакомит вас с базовым синтаксисом и принципами работы одного из самых мощных языков программирования. Вы пройдете путь от первой программы до понимания основ работы с памятью и объектами.

1. Введение в C++: настройка окружения и первая программа Hello World

Введение в C++: настройка окружения и первая программа Hello World

Добро пожаловать в курс «Основы C++: Быстрый старт для новичков»! Если вы читаете эту статью, значит, вы решили освоить один из самых мощных, быстрых и востребованных языков программирования в мире. C++ — это фундамент, на котором построены операционные системы, игровые движки, браузеры и высокопроизводительные финансовые платформы.

В этой первой статье мы не будем грузить вас сложной теорией алгоритмов. Наша цель проста и практична: подготовить ваш компьютер к работе и написать первую работающую программу. Мы пройдем путь от чистого листа до заветной фразы «Hello, World!» на экране.

Что такое C++ и как он работает?

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

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

!Схематичное изображение того, как исходный код превращается в исполняемую программу.

Процесс выглядит так:

  • Вы пишете код в текстовом редакторе.
  • Запускаете компилятор.
  • Компилятор проверяет код на ошибки и превращает его в исполняемый файл (например, .exe на Windows).
  • Вы запускаете этот файл, и компьютер выполняет ваши команды.
  • Настройка рабочего окружения

    Чтобы начать программировать, вам нужно место, где писать код (редактор), и инструмент, который этот код обработает (компилятор). Вместе они часто объединяются в IDE (Integrated Development Environment — Интегрированная Среда Разработки).

    Мы рассмотрим два пути: быстрый (онлайн) и профессиональный (локальная установка).

    Способ 1: Быстрый старт (Онлайн-компиляторы)

    Если вы не хотите ничего устанавливать прямо сейчас и просто хотите попробовать, используйте онлайн-сервисы. Это отличный вариант для первых экспериментов.

    Популярные сервисы: * OnlineGDB * Repl.it * Ideone

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

    Способ 2: Профессиональный (Локальная установка)

    Выбор инструментов зависит от вашей операционной системы.

    #### Для пользователей Windows

    Самый простой и надежный вариант — Visual Studio Community (не путать с Visual Studio Code). Это мощная, бесплатная среда от Microsoft, в которой есть всё необходимое «из коробки».

  • Скачайте установщик Visual Studio Community с официального сайта Microsoft.
  • Запустите установку.
  • Важный момент: В окне выбора компонентов поставьте галочку напротив пункта «Разработка классических приложений на C++» (Desktop development with C++).
  • Нажмите «Установить».
  • #### Для пользователей macOS

    На компьютерах Apple стандартом является среда Xcode.

  • Откройте App Store.
  • Найдите и установите Xcode.
  • После установки запустите его и согласитесь с лицензионным соглашением, чтобы установились необходимые компоненты командной строки.
  • #### Для пользователей Linux

    Вам, скорее всего, понадобится только текстовый редактор (например, VS Code) и компилятор GCC, который часто уже установлен или легко ставится через терминал:

    Ваша первая программа: Hello, World!

    Теперь, когда среда готова, давайте напишем код. Традиционно изучение любого языка начинается с программы, которая просто выводит на экран фразу «Hello, World!».

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

    После ввода кода найдите кнопку Run (Запустить) или Build & Run (Собрать и запустить). Обычно это зеленый треугольник.

    Если вы всё сделали правильно, в нижней части экрана (в консоли) вы увидите:

    Поздравляем! Вы только что стали программистом на C++.

    Разбор полетов: как это работает?

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

    1. Подключение библиотек

    * #include — это команда препроцессору (специальной части компилятора) «подключить» внешний файл. * <iostream> — это название стандартной библиотеки (Input/Output Stream), которая отвечает за ввод и вывод данных. Без этой строчки компьютер не знал бы, как выводить текст на экран, так как базовый язык C++ сам по себе этого не умеет — ему нужны инструменты.

    2. Главная функция

    * main — это точка входа в программу. Любая программа на C++ начинает свое выполнение именно с функции main. Она обязана быть в каждой программе. * int — означает, что эта функция по завершении вернет целое число (integer). Это отчет для операционной системы о том, как завершилась программа. * Фигурные скобки { и } обозначают начало и конец блока кода, который относится к этой функции. Всё, что внутри скобок — это тело функции.

    3. Вывод текста

    Это самая насыщенная строка: * std:: — это указание пространства имен (namespace). Мы говорим: «Используй инструмент cout из стандартной библиотеки std». * cout (читается как «си-аут») — объект, отвечающий за вывод в консоль. * << — оператор вставки. Представьте это как стрелочки, которые направляют данные. Мы берем строку "Hello, World!" и «кидаем» её в cout. * "Hello, World!" — это строковый литерал. Текст, который мы хотим вывести, всегда должен быть в двойных кавычках. * std::endl — (end line) специальная команда, которая переносит курсор на новую строку. Это аналог нажатия клавиши Enter. * ;Точка с запятой. Это, пожалуй, самый важный символ для новичка. В C++ каждая команда (инструкция) обязана заканчиваться точкой с запятой. Это как точка в конце предложения в русском языке. Если её забыть, программа не запустится.

    4. Завершение программы

    * return — оператор возврата значения. * 0 — это сигнал операционной системе, что программа завершилась успешно, без ошибок. Если бы мы вернули другое число (например, 1 или -1), система могла бы подумать, что произошел сбой.

    Частые ошибки новичков

    Даже в таких простых программах можно допустить ошибки. Не пугайтесь, если увидите красный текст в консоли — это компилятор пытается вам помочь.

  • Забытая точка с запятой ;
  • Ошибка:* expected ';' before 'return' Решение:* Проверьте конец предыдущей строки.

  • Неправильные кавычки
  • * В C++ строки пишутся только в двойных кавычках ". Одинарные кавычки ' используются только для одиночных символов (например, 'A').

  • Опечатки в командах
  • * std::cot вместо std::cout или Main вместо main. C++ чувствителен к регистру: Main и main — это два разных слова для компилятора.

  • Забытое подключение библиотеки
  • * Если вы удалите #include <iostream>, компилятор скажет, что не знает, что такое std::cout.

    Комментарии в коде

    Хороший программист оставляет заметки в коде для себя и других. Эти заметки называются комментариями. Компилятор их полностью игнорирует.

    Использование комментариев помогает не запутаться, когда ваш код вырастет с 5 строк до 500.

    Заключение

    Сегодня вы сделали огромный шаг. Вы не просто установили программу, вы написали код, скомпилировали его и заставили компьютер выполнить вашу команду.

    В этой статье мы: * Узнали, что такое компиляция. * Настроили рабочее окружение. * Написали и разобрали программу «Hello, World!». * Познакомились с std::cout, main и точкой с запятой.

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

    Удачи в обучении, и помните: каждый профессионал когда-то начинал с «Hello, World!».

    2. Переменные, типы данных и базовые операции ввода-вывода

    Переменные, типы данных и базовые операции ввода-вывода

    В предыдущей статье мы научились здороваться с миром, выводя текст на экран. Это важный шаг, но пока наша программа похожа на попугая: она умеет говорить только то, что мы в неё жестко «зашили». Чтобы программы стали полезными — например, могли сложить два числа, которые ввел пользователь, или запомнить имя игрока — нам нужно научиться работать с памятью.

    Сегодня мы разберем три фундаментальных кита программирования: переменные (где хранить данные), типы данных (какие бывают данные) и ввод-вывод (как общаться с пользователем).

    Что такое переменная?

    Представьте, что память вашего компьютера — это огромный склад с пустыми коробками. Чтобы сохранить какое-то значение (например, возраст пользователя), вы берете пустую коробку, кладете туда число и наклеиваете на коробку этикетку с названием, например, age.

    В программировании: * Коробка — это ячейка памяти. * Этикетка — это имя переменной. * Содержимое — это значение переменной.

    !Визуализация концепции переменных как коробок с данными в памяти компьютера.

    Переменная — это именованная область памяти, в которой хранится значение определенного типа. В отличие от констант, содержимое этой «коробки» можно менять в процессе работы программы (поэтому она и называется переменная).

    Объявление и инициализация

    В C++ нельзя просто взять и использовать переменную. Сначала вы должны сообщить компилятору о своих намерениях. Это называется объявлением.

    Синтаксис выглядит так:

    Например, создадим переменную для хранения количества жизней игрока:

    Здесь int — это тип данных (целое число), а lives — имя. После этой строчки компьютер выделяет место в памяти. Однако, мы не знаем, что именно лежит в этой памяти сейчас. Там может быть «мусор» — случайное число, оставшееся от работы других программ.

    Чтобы положить в коробку значение, используется операция присваивания (=):

    Можно (и нужно) совмещать эти два шага. Это называется инициализацией:

    > Всегда старайтесь инициализировать переменные при создании. Работа с неинициализированными переменными — одна из самых частых причин ошибок у новичков.

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

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

    Рассмотрим базовые типы, которые вы будете использовать в 90% случаев.

    1. Целые числа (int)

    Используется для счета предметов, количества повторений, индексов. Не может хранить дробную часть.

    2. Вещественные числа (double)

    Используются для чисел с плавающей точкой (дробных). В C++ разделителем является точка, а не запятая.

    3. Символы (char)

    Хранит один единственный символ. Важно: значение пишется в одинарных кавычках.

    cpp #include <iostream>

    int main() { // 1. Объявление переменных double num1; double num2;

    // 2. Ввод данных std::cout << "Введите первое число: "; std::cin >> num1;

    std::cout << "Введите второе число: "; std::cin >> num2;

    // 3. Вычисление и вывод double result = num1 + num2; std::cout << "Сумма: " << result << std::endl;

    return 0; } ``

    Попробуйте запустить этот код у себя, поменять тип переменных на int и посмотреть, как изменится поведение программы при вводе дробных чисел.

    Заключение

    Теперь ваша программа обладает памятью и умеет общаться. Мы разобрали: * Как создавать переменные (int, double, string и др.). * Как считывать данные (std::cin >>). * Как выполнять математические операции и избегать ловушек с целочисленным делением.

    В следующей статье мы научим нашу программу принимать решения. Мы разберем условные конструкции if и else`, чтобы код мог реагировать по-разному в зависимости от действий пользователя.

    3. Управляющие конструкции: условные операторы и циклы

    Управляющие конструкции: условные операторы и циклы

    В предыдущих статьях мы научились создавать «коробки» для данных (переменные) и общаться с пользователем через консоль. Но пока наши программы ведут себя слишком предсказуемо: они выполняют команды строго по порядку, сверху вниз, как поезд, идущий по единственному рельсовому пути.

    В реальной жизни мы постоянно принимаем решения: «Если пойдет дождь, я возьму зонт, иначе пойду в футболке». Или повторяем действия: «Пока не выучу билет, буду читать учебник».

    Чтобы наши программы стали по-настоящему умными, мы должны научить их двум вещам:

  • Ветвлению (выбору пути в зависимости от условий).
  • Циклам (многократному повторению действий).
  • Сегодня мы превратим наш линейный код в сложную структуру, способную реагировать на действия пользователя.

    Условный оператор if: Учим программу думать

    Самая базовая конструкция в любом языке программирования — это оператор if (если). Он позволяет выполнить блок кода только в том случае, если определенное условие истинно.

    !Блок-схема работы условного оператора if

    Синтаксис выглядит так:

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

    Если пользователь введет 20, он увидит приветствие. Если введет 15 — программа просто промолчит и пойдет дальше.

    Операторы сравнения

    Внутри круглых скобок if мы используем операторы сравнения. Они возвращают тип bool (истина или ложь).

    * > — больше * < — меньше * >= — больше или равно * <= — меньше или равно * == — равно (обратите внимание: два знака равенства!) * != — не равно

    > Важное предупреждение: Новички часто путают оператор присваивания = и оператор сравнения ==. > * a = 5 — положить число 5 в переменную a. > * a == 5 — проверить, равна ли переменная a числу 5.

    Конструкция else: План «Б»

    Что, если мы хотим не просто промолчать, когда условие ложно, а выполнить альтернативное действие? Для этого существует оператор else (иначе).

    Теперь программа всегда выберет один из двух путей. Третьего не дано.

    Цепочка else if: Множественный выбор

    Иногда двух вариантов недостаточно. Например, в игре мы хотим оценить количество очков игрока.

    Компьютер проверяет условия сверху вниз. Как только он найдет первое истинное условие, он выполнит его блок и пропустит все остальные.

    Логические операции: Сложные условия

    Часто нам нужно проверить сразу несколько условий. Например: «Если сегодня суббота И хорошая погода, я пойду гулять».

    В C++ для этого есть логические связки:

    1. Логическое И (&&)

    Условие истинно, только если оба подусловия истинны.

    Математически это можно записать как пересечение множеств условий:

    где — первое условие, — знак логического умножения (И), — второе условие.

    Пример в коде:

    2. Логическое ИЛИ (||)

    Условие истинно, если хотя бы одно из подусловий истинно.

    где — первое условие, — знак логического сложения (ИЛИ), — второе условие.

    Пример:

    3. Логическое НЕ (!)

    Инвертирует значение. Истина становится ложью, и наоборот.

    Циклы: Сила повторения

    Представьте, что вам нужно вывести фразу «Я люблю C++» 100 раз. Копировать строку cout 100 раз — плохая идея. Если нужно будет изменить текст, придется править 100 строк.

    В программировании есть принцип DRY (Don't Repeat Yourself — Не повторяйся). Для повторения действий используются циклы.

    Цикл while (Пока)

    Это самый простой цикл. Он работает по принципу: «Пока условие истинно — делай».

    !Циклический процесс выполнения программы

    Разберем этот код:

  • Создаем переменную counter (счетчик), равную 1.
  • Проверяем: ? Да. Заходим в цикл.
  • Выводим текст.
  • Увеличиваем counter на 1. Теперь он равен 2.
  • Снова проверяем: ? Да. Повторяем.
  • ... (процесс повторяется) ...
  • Когда counter станет равен 6, условие станет ложным (false). Цикл завершится.
  • > Осторожно: Если вы забудете увеличить счетчик (counter = counter + 1), условие всегда будет истинным, и программа зависнет в бесконечном цикле. Это классическая ошибка новичка.

    Цикл for (Для)

    Цикл while хорош, когда мы не знаем точного числа повторений (например, «читай файл, пока он не кончится»). Но если мы точно знаем, что нужно выполнить действие 10 раз, удобнее использовать цикл for.

    Он собирает всю настройку цикла в одну строку:

    В круглых скобках три части, разделенные точкой с запятой:

  • Инициализация (int i = 0): Создаем счетчик. Выполняется один раз в самом начале.
  • Условие (i < 10): Проверяется перед каждым шагом. Если истинно — идем дальше.
  • Модификация (i++): Выполняется после каждого шага. i++ — это сокращение от i = i + 1.
  • Количество итераций (повторений) в таком цикле можно рассчитать по формуле:

    где — количество итераций, — верхняя граница (в нашем случае 10, так как знак строго меньше), — начальное значение (0). В примере выше цикл выполнится ровно 10 раз.

    Управление потоком: break и continue

    Иногда нужно вмешаться в работу цикла прямо посередине.

    * break — немедленно прерывает цикл и выходит из него. Используется, если мы нашли то, что искали, и продолжать нет смысла. continue — пропускает оставшуюся часть текущей* итерации и переходит к следующей проверке условия.

    Пример использования continue для вывода только нечетных чисел:

    Практика: Игра «Угадай число»

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

    Компьютер «загадает» число (мы пока зададим его вручную), а пользователь будет пытаться его угадать.

    Скопируйте этот код в свою среду разработки и запустите. Поздравляю, вы написали свою первую интерактивную программу с логикой!

    Заключение

    Сегодня мы сделали огромный рывок. Из простых последовательных команд мы перешли к созданию алгоритмов.

    Мы изучили: * Как использовать if и else для принятия решений. * Как работают логические операторы &&, ||, !. * Как заставить компьютер повторять действия с помощью while и for.

    В следующей статье мы разберем массивы — способ хранить сотни и тысячи переменных под одним именем, что позволит нам создавать еще более мощные программы.

    4. Функции, массивы и введение в указатели

    Функции, массивы и введение в указатели

    Мы уже прошли большой путь: научились создавать переменные, общаться с пользователем, принимать решения с помощью if и зацикливать действия. Но по мере того как ваши программы становятся сложнее, код начинает разрастаться. Если вы пишете игру, вам не захочется копировать один и тот же блок кода для атаки монстра 50 раз. А если нужно хранить список из 100 лучших результатов, создавать 100 переменных (score1, score2, ...) — это путь в никуда.

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

    Функции: Разделяй и властвуй

    Представьте, что ваша программа — это кулинарная книга. Если бы в каждом рецепте пирога приходилось заново подробно описывать, как замесить тесто, книга стала бы толстой и неудобной. Вместо этого там просто написано: «Приготовьте тесто по рецепту на стр. 10».

    В программировании функция — это такой именованный мини-рецепт. Это блок кода, который выполняет определенную задачу. Вы пишете его один раз, а затем просто «вызываете» по имени столько раз, сколько нужно.

    !Функция как черный ящик: принимает данные, обрабатывает их и выдает результат.

    Анатомия функции

    В C++ функция состоит из заголовка и тела. Вот общий шаблон:

    Давайте напишем функцию, которая складывает два числа:

    Разберем по частям:

  • int (в начале) — это обещание. Функция обещает, что после своей работы она вернет целое число.
  • sum — имя функции. По нему мы будем её вызывать.
  • (int a, int b) — параметры. Это переменные-заготовки, в которые попадут данные при вызове.
  • return — ключевое слово, которое завершает работу функции и «выстреливает» результат наружу.
  • Как использовать функцию?

    Функции обычно пишутся до функции main. А внутри main мы их вызываем.

    Функции void (Пустота)

    Иногда функция не должна ничего возвращать. Например, она просто выводит текст на экран или сохраняет игру. В таком случае вместо типа данных мы пишем void.

    Массивы: Вагончики с данными

    До сих пор каждая наша переменная хранила только одно значение. Но что, если нам нужно сохранить температуру за каждый день месяца? Создавать 30 переменных (temp1, temp2...) неудобно.

    Массив — это структура данных, которая хранит фиксированное количество элементов одного типа последовательно в памяти.

    !Массив в памяти похож на ряд пронумерованных ячеек.

    Создание массива

    Синтаксис прост:

    Пример:

    Можно сразу заполнить его значениями:

    Индексация: Самое важное правило

    Чтобы достать или положить значение в конкретный «ящик» массива, мы используем индекс — порядковый номер элемента.

    > Запомните: В C++ (и большинстве других языков) нумерация начинается с НУЛЯ, а не с единицы.

    Если у вас массив на 5 элементов, их индексы будут: 0, 1, 2, 3, 4.

    Массивы и циклы — лучшие друзья

    Массивы созданы для того, чтобы их обрабатывали в циклах. Например, вывод всех элементов на экран:

    Математика адресации в массиве

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

    Где: * — искомый адрес ячейки памяти, где лежит элемент. * — базовый адрес (адрес самого начала массива, то есть элемента с индексом 0). * — индекс элемента, к которому мы хотим обратиться. * — размер одного элемента в байтах (например, для int это обычно 4 байта).

    Именно поэтому индексация с нуля так удобна: для первого элемента () смещение равно нулю.

    Введение в указатели: Адреса памяти

    Мы подошли к теме, которой пугают детей в школах программирования. Но на самом деле концепция указателей проста, если понять аналогию.

    Переменная и её адрес

    Когда вы пишете int score = 100;, компьютер находит свободное место в оперативной памяти и кладет туда число 100. У этого места есть уникальный адрес (как адрес дома на улице).

    Обычно нам не нужно знать этот адрес, мы пользуемся именем переменной (score). Но иногда нам нужно работать именно с адресом.

    В C++ есть два важных оператора для работы с памятью:

  • & (Амперсанд) — оператор взятия адреса. Читается как «адрес переменной...».
  • * (Звездочка) — оператор разыменования. Читается как «значение, лежащее по адресу...».
  • Посмотрим на адрес переменной:

    Что такое указатель?

    Указатель — это переменная, которая хранит адрес другой переменной.

    Если обычная переменная хранит «книгу», то указатель хранит «номер полки в библиотеке», где эта книга стоит.

    Синтаксис объявления:

    Пример:

    Теперь ptr «указывает» на a.

    !Указатель ptr хранит адрес переменной a, ссылаясь на неё.

    Зачем это нужно?

    Используя указатель, мы можем менять исходную переменную, даже не зная её имени, а зная только адрес. Для этого используется оператор * (разыменование).

    Это мощнейший инструмент. Указатели позволяют:

  • Передавать огромные объемы данных в функции без их копирования (просто передав адрес).
  • Создавать динамические структуры данных, которые растут во время работы программы.
  • Работать с железом напрямую.
  • Частые ошибки новичков

  • Выход за границы массива.
  • Если у вас массив arr[5], то элемента arr[5] не существует (максимум arr[4]). Попытка записи в arr[5] может обрушить программу или переписать важные данные в памяти.
  • Неинициализированные указатели.
  • Мы создали указатель, но не дали ему адрес. Он указывает в случайное место памяти («мусор»). Попытка записать туда что-то приведет к аварийному завершению.

    Заключение

    Сегодня мы превратили наш код из простого списка инструкций в структурированную систему.

    * Функции позволяют нам не повторяться и разбивать сложные задачи на простые подзадачи. * Массивы дают возможность работать с наборами данных как с единым целым. * Указатели открывают дверь к прямой работе с памятью компьютера.

    В следующей статье мы углубимся в объектно-ориентированное программирование (ООП) и узнаем, как создавать свои собственные типы данных, описывающие реальные объекты мира.

    Практикуйтесь, экспериментируйте с кодом и не бойтесь ошибок — это лучший способ учиться!

    5. Основы объектно-ориентированного программирования: классы и объекты

    Основы объектно-ориентированного программирования: классы и объекты

    Мы прошли долгий путь: от «Hello World» до функций и указателей. До сих пор мы писали программы в процедурном стиле. Это значит, что мы воспринимали программу как набор инструкций и функций, которые манипулируют данными. Данные (переменные) жили сами по себе, а функции — сами по себе.

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

    Здесь на сцену выходит Объектно-Ориентированное Программирование (ООП). Это методология, которая позволяет программистам моделировать реальный мир, объединяя данные и поведение в единые сущности.

    Что такое Класс и Объект?

    Это два фундаментальных понятия ООП. Чтобы понять их разницу, давайте обратимся к аналогии из реальной жизни.

    Представьте, что вы инженер на автомобильном заводе. Прежде чем выпустить машину, вам нужен чертеж. На чертеже написано: «У машины 4 колеса, двигатель V8, цвет может быть любым». Чертеж — это не сама машина. На нем нельзя поехать. Но по этому чертежу можно собрать тысячи реальных машин.

    !Чертеж (Класс) описывает структуру, а автомобили (Объекты) являются конкретными воплощениями этого чертежа.

    * Класс — это чертеж, шаблон или тип данных, который описывает, какими свойствами и поведением будет обладать сущность. * Объект (или экземпляр класса) — это конкретная реализация этого шаблона в памяти компьютера.

    Синтаксис класса в C++

    Давайте создадим класс, описывающий кота. В C++ классы определяются ключевым словом class.

    Обратите внимание на точку с запятой ; после закрывающей фигурной скобки. Это обязательно. Если её забыть, компилятор выдаст ошибку.

    Разбор структуры класса

  • class Cat — мы объявляем новый тип данных под названием Cat.
  • public: — это модификатор доступа. Всё, что написано после него, доступно из любой части программы (например, из функции main). О других модификаторах мы поговорим чуть позже.
  • Атрибуты (Поля) — переменные name и age. Они хранят состояние объекта.
  • Методы — функция meow(). Она описывает поведение объекта.
  • Создание и использование объектов

    Класс сам по себе память почти не занимает (это просто инструкция). Память выделяется, когда мы создаем объект.

    Оператор «точка» (.) используется для доступа к тому, что находится внутри объекта. Это похоже на то, как мы открываем дверь в комнату, чтобы взять вещь.

    Инкапсуляция: Защита данных

    Один из главных принципов ООП — инкапсуляция. Это сокрытие внутренней реализации и защита данных от некорректного использования.

    Представьте, что кто-то в вашей программе написал:

    С точки зрения синтаксиса это верно (int может быть отрицательным). Но с точки зрения логики — кот не может иметь отрицательный возраст. Чтобы избежать таких ошибок, мы используем модификатор доступа private.

    * public (публичный) — доступно всем. * private (приватный) — доступно только методам самого класса.

    Давайте перепишем наш класс правильно:

    Теперь в main мы не можем написать myCat.age = 5. Компилятор запретит это. Мы обязаны использовать методы:

    Конструкторы: Рождение объекта

    Когда мы создаем переменную int x;, в ней может лежать мусор. То же самое с объектами. Чтобы объект сразу рождался с правильными данными, используют специальный метод — конструктор.

    Особенности конструктора:

  • Его имя совпадает с именем класса.
  • У него нет типа возвращаемого значения (даже void не пишется).
  • Он вызывается автоматически в момент создания объекта.
  • Практика: Класс персонажа RPG

    Давайте объединим всё изученное и создадим класс для героя игры. Мы добавим немного математики для расчета урона.

    В играх часто используется формула уменьшения здоровья при ударе. Допустим, здоровье уменьшается на величину урона за вычетом брони.

    Формула расчета нового здоровья:

    где — новое значение здоровья, — текущее здоровье, — входящий урон (Damage), а — показатель брони (Armor).

    Реализуем это в коде:

    Заключение

    Сегодня мы совершили революцию в вашем понимании программирования. Мы перешли от разрозненных переменных к объектам, которые имеют состояние и поведение.

    Мы узнали:

  • Класс — это чертеж, Объект — это дом, построенный по чертежу.
  • Данные класса называются полями, а функции — методами.
  • Инкапсуляция (private) защищает данные от поломки.
  • Конструктор помогает правильно инициализировать объект при создании.
  • В следующей статье мы углубимся в работу с памятью и узнаем, как создавать объекты не в стеке, а в куче, используя операторы new и delete, что критически важно для управления ресурсами в крупных проектах.