Учебники по программированию - страница 3

 

Конструкторы ООП — типы конструкторов, которые вам нужно знать (от основ до мастерства)



Конструкторы ООП — типы конструкторов, которые вам нужно знать (от основ до мастерства)

В этом видео мы обсудим различные типы конструкторов, их назначение и почему они необходимы в программировании. Я приведу примеры и объясню фоновую работу конструкторов. Но прежде чем мы углубимся, я хочу порекомендовать инструмент, который я использую уже много лет, под названием PBS Studio. Это мощный статический анализатор кода, который помогает отслеживать ошибки и улучшать качество кода. Он легко интегрируется с различными IDE и поддерживает такие языки, как C, C++, C# и Java. Вы можете найти ссылку для скачивания и даже узнать, как получить ее бесплатно, если вы студент. Теперь вернемся к видео.

Для начала давайте создадим класс под названием «Пользователь» с общедоступными членами: «firstName», «lastName», «age» и «email». В настоящее время мы вручную присваиваем значения этим свойствам для каждого создаваемого нами пользователя. Однако такой подход становится непрактичным по мере роста числа пользователей.

Вместо этого мы рассмотрим лучшее решение с использованием конструкторов. Конструкторы используются для создания объектов и автоматизируют процесс инициализации свойств объектов. Мы начнем с объяснения фоновой работы конструкторов на примерах.

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

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

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

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

Двигаясь дальше, давайте рассмотрим второй тип конструктора, параметризованный конструктор. В отличие от конструктора по умолчанию, параметризованный конструктор принимает определенные значения в качестве параметров и использует их для создания экземпляров свойств объекта. Я приведу пример параметризованного конструктора, который принимает параметры для firstName, lastName и age.

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

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

OOP Constructors - Types of Constructors You Need to Know (Basics to Mastery)
OOP Constructors - Types of Constructors You Need to Know (Basics to Mastery)
  • 2023.03.21
  • www.youtube.com
📚 Learn how to solve problems and build projects with these Free E-Books ⬇️C++ Lambdas e-book - free download here: https://bit.ly/freeCppE-BookEntire Objec...
 

Дружественные функции и классы в C++ (Программирование для начинающих)



Дружественные функции и классы в C++ (Программирование для начинающих)

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

В этом видео вы узнаете, как и когда использовать функции друзей и классы друзей. Для демонстрации мы будем использовать Visual Studio Community, а также я познакомлю вас с отличным расширением под названием Visual Assist. Ссылку на скачивание вы найдете в описании ниже. Visual Assist — это интеллектуальный помощник по написанию кода, который используют многие профессиональные разработчики, особенно для крупных проектов или разработки игр с такими движками, как Unreal Engine. Он улучшает завершение кода, предлагает умные предложения по рефакторингу, предоставляет фрагменты кода и улучшает навигацию и поиск в вашем проекте.

Теперь давайте углубимся в тему функций друзей. Чтобы объяснить эту концепцию, давайте создадим задачу и решим ее с помощью дружественных функций. Мы создадим класс EquilateralTriangle для представления треугольника, все три стороны которого имеют одинаковую длину. Класс будет иметь частные переменные для длины стороны, окружности и площади. Мы также добавим общедоступный метод установки, чтобы установить длину стороны и вычислить длину окружности и площадь в рамках этого метода.

Однако если мы попытаемся получить доступ к закрытым членам вне класса, мы столкнемся с ошибками. Одно из решений — сделать закрытые члены общедоступными или создать общедоступные геттеры, но это сделает их доступными для всех. Вместо этого мы можем использовать функции друзей для выборочного предоставления доступа. Мы создадим глобальную функцию PrintResults, которая будет печатать длину окружности и площадь треугольника. Объявив эту функцию другом класса EquilateralTriangle, она получает доступ к закрытым членам.

Но помните, тщательно выбирайте дружественные функции и избегайте их чрезмерного использования для поддержания инкапсуляции. Кроме того, в C++ у вас также могут быть дружественные классы. Если мы переместим функцию «PrintResults» в класс с именем «Домашняя работа» и сделаем ее общедоступной функцией-членом, мы можем объявить «Домашнюю работу» в качестве дружественного класса для «EquilateralTriangle». Таким образом, класс «Домашняя работа» может получить доступ к закрытым и защищенным членам «EquilateralTriangle».

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

Я надеюсь, что вы найдете это видео полезным для понимания и использования дружественных функций и дружественных классов в ваших проектах программирования. Оставайтесь с нами, чтобы не пропустить еще больше интересного контента, и не забудьте проверить расширение Visual Assist для Visual Studio!

Friend functions and classes in C++ (Programming for beginners)
Friend functions and classes in C++ (Programming for beginners)
  • 2021.12.21
  • www.youtube.com
📚 Learn how to solve problems and build projects with these Free E-Books ⬇️C++ Lambdas e-book - free download here: https://bit.ly/freeCppE-BookEntire Objec...
 

Деструкторы в программировании: практическая демонстрация



Деструкторы в программировании: практическая демонстрация

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

Деструкторы — это специальные функции, вызываемые при уничтожении объекта. Они выполняют необходимые задачи очистки, такие как освобождение ресурсов, таких как память или файлы, хранящиеся в объекте. Если не освободить эти ресурсы, это может снизить производительность, стабильность и привести к утечкам памяти.

Прежде чем мы начнем обсуждать деструкторы, я хочу познакомить вас с инструментом, который я люблю использовать, он называется PBS Studio. Это статический анализатор кода, который помогает мне писать более качественный код без ошибок. Он анализирует ваш код на наличие потенциальных проблем и ошибок, экономя ваше время и деньги, обнаруживая ошибки до того, как они попадут в рабочую среду. Его легко интегрировать с популярными IDE, и он поддерживает несколько языков программирования. Вы можете скачать его по ссылке в описании и попробовать бесплатно. Если вы студент, проверьте их веб-сайт для бесплатных вариантов.

Теперь давайте углубимся в деструкторы. Деструктор — это специальная функция с именем, идентичным имени класса, которому предшествует тильда (~). Он не имеет возвращаемого типа, не получает никаких параметров и должен быть помещен в открытый раздел вашего класса. В каждом классе может быть только один деструктор.

Чтобы проиллюстрировать деструкторы, давайте создадим класс «Книга» с двумя свойствами: «название» и «автор». Мы также создадим конструктор и деструктор. Помните, что деструктор должен освобождать любые ресурсы, удерживаемые объектом.

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

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

Если ваш класс не использует указатели, компилятор автоматически выполнит освобождение памяти. Однако, если вы работаете с указателями, вам нужно вручную освободить память в деструкторе, чтобы избежать утечек памяти. Не забудьте использовать «delete[] arrayName» для массивов и установить указатели на nullptr после освобождения.

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

Destructors in Programming: Practical Demonstration
Destructors in Programming: Practical Demonstration
  • 2023.03.29
  • www.youtube.com
📚 Learn how to solve problems and build projects with these Free E-Books ⬇️C++ Lambdas e-book - free download here: https://bit.ly/freeCppE-BookEntire Objec...
 

Конструкторы копирования C++ (руководство для начинающих + практические примеры)



Конструкторы копирования C++ (руководство для начинающих + практические примеры)

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

В этом видео я объясню все, что вам нужно знать о конструкторах копирования. Новички часто понимают концепцию конструкторов копирования, но испытывают трудности с пониманием того, когда и как их использовать, а также с потенциальными ошибками, которые могут возникнуть. Я расскажу обо всех этих аспектах шаг за шагом.

Давайте начнем с изучения кода из моего предыдущего видео. Я создал класс под названием «Книга» с такими свойствами, как название, автор и указатель под названием «рейты». Указатель «рейтинги» представляет собой динамический массив, в который пользователи могут вводить рейтинги книги. Также имеется «счетчик ставок» для отслеживания размера массива. Если вы не знакомы с указателями и динамическими массивами, рекомендую посмотреть мое видео на эту тему (ссылка в описании).

Я реализовал параметризованный конструктор для класса Book, который принимает название и автора в качестве параметров и создает объект книги на основе этих значений. Я также включил деструктор, который важен для освобождения памяти, выделенной конструктором. Крайне важно использовать анализатор кода, такой как PVS-Studio, для обнаружения скрытых ошибок и слабых мест в вашем коде. Я лично рекомендую использовать PVS-Studio, так как он эффективен при поиске ошибок и предоставлении предложений по их исправлению. Скачать его можно бесплатно по ссылке в описании.

Теперь давайте сосредоточимся на теме конструкторов копирования. Целью конструктора копирования является создание нового объекта на основе существующего объекта. Это позволяет вам сделать копию объекта и использовать ее для создания нового. По умолчанию C++ предоставляет конструктор копирования по умолчанию. Однако при работе с указателями необходимо создать собственный конструктор копирования, чтобы избежать ошибок.

Без специального конструктора копирования использование указателей может привести к исключениям и ошибкам. Давайте рассмотрим следующий сценарий: я хочу создать «Книгу3» на основе данных «Книги1». Я хочу скопировать все свойства «Книги1», чтобы создать «Книгу3». Здесь в игру вступает конструктор копирования.

Чтобы создать конструктор копирования, следуйте этим правилам:

  1. Он должен быть объявлен в публичном разделе класса.
  2. У него нет возвращаемого типа (даже недействительного).
  3. Его имя должно совпадать с именем класса.
  4. Он принимает параметр того же типа класса, который представляет исходный объект.

Создадим конструктор копирования. В конструкторе копирования мы получим исходный объект как константную ссылку (const Book& original). Это предотвращает любые модификации исходного объекта внутри конструктора копирования.

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

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

Следуя этим рекомендациям, мы можем создать правильный конструктор копирования, который позволит избежать ошибок, связанных с памятью.

Я надеюсь, что это объяснение проясняет концепцию конструкторов копирования и их важность.

C++ Copy constructors (beginner-friendly tutorial + practical examples)
C++ Copy constructors (beginner-friendly tutorial + practical examples)
  • 2023.04.19
  • www.youtube.com
This is an OOP tutorial where I'll teach you about copy constructors in C++. After watching this video, you'll learn what is the purpose of copy constructors...
 

Кодируй сам! Tetris — программирование с нуля (быстрый и простой C++)



Кодируй сам! Tetris — программирование с нуля (быстрый и простой C++)

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

Как видите, у нас на экране классическая фигура тетриса. Мы сможем вращать эти фигуры благодаря силе кодирования. В игре есть функция обнаружения столкновений, которая гарантирует, что части правильно взаимодействуют друг с другом. Если нам удастся завершить линию, стратегически размещая случайные фигуры, она исчезнет, и соответственно увеличится наш счет. Однако, если мы не будем осторожны и стопка фигур достигнет вершины, игра окончена.

Теперь вам может быть интересно, почему мы фокусируемся на игровом движке, а не на графике. Хотя эстетика важна и может привлечь игроков, настоящая суть игры заключается в ее движке — той части, которая отвечает за реализацию игрового процесса, логики, правил, задач и многого другого. Графические движки всегда можно добавить позже, и вы даже можете привлечь художника, чтобы украсить свою игру. Но чтобы по-настоящему понять разработку игр, вам нужно понять основы создания игрового движка.

Для начала нам понадобятся некоторые игровые ресурсы. В Tetris эти активы представляют собой различные формы, называемые «блоками тетромино». Мы сохраним эти фигуры в виде строк, что облегчит нам их визуализацию. В тетрисе используется семь распространенных фигур, и мы будем представлять их с помощью таких символов, как точки (.) для пустых мест и заглавная буква X для самой фигуры. Располагая эти символы, мы создаем строки, которые визуально изображают формы.

Теперь вместо использования многомерных массивов для представления двумерных фигур мы будем использовать одномерный массив и манипулировать индексами с помощью простых математических вычислений. Такой подход позволяет более эффективно обрабатывать повороты и отражения фигур. Мы будем использовать формулы для определения соответствующих индексов для каждого вращения. Например, умножив координату X на 4, мы можем получить нужный индекс для поворота на 90 градусов. Этот метод избавит нас от создания отдельных ресурсов для каждого возможного варианта формы.

Помимо блоков тетромино, нам также нужно игровое поле. Мы определим размеры поля, используя переменные ширины и высоты. В этом случае мы выберем размер поля 12 ячеек в ширину и 18 ячеек в высоту. Для представления элементов игрового поля мы будем использовать массив символов без знака. Каждой ячейке будет присвоено значение, указывающее ее содержимое, например пустое пространство, часть фигуры или граничные стены.

Чтобы визуализировать нашу игру, мы будем использовать командную строку в качестве экранного буфера. Создав массив с размерами окна командной строки, мы можем рисовать на нем элементы нашей игры. Мы будем использовать определенные символы для представления различных элементов игры, таких как формы, пустые пространства и ограничивающие стены. Затем мы отобразим содержимое массива на экране командной строки.

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

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

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

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

Чтобы получить текущее состояние клавиш, нажатых пользователем, мы будем использовать функцию «получить состояние асинхронной клавиши». Перебирая массив, представляющий состояние клавиш, мы можем определить, нажата ли каждая клавиша в данный момент или нет. Эта функция возвращает логическое значение: true, если клавиша нажата, и false, если нет. Чтобы проверить состояние определенного ключа, мы используем постоянное строковое выражение, представляющее коды виртуальных ключей для каждого ключа.

Проверяя состояние этих четырех клавиш, мы можем создать массив, содержащий истинные или ложные значения, указывающие, нажата ли каждая клавиша или нет. Это упрощает процесс и дает нам массив, представляющий текущее состояние клавиш.

В качестве примера рассмотрим левую клавишу. Когда пользователь нажимает левую клавишу, нам нужно проверить, может ли игровая фигура поместиться слева от ее текущей позиции. Для этого мы используем функцию под названием «подходит ли фигура», которая учитывает текущую фигуру, ее поворот и текущую позицию по оси X. Вычитая 1 из текущей позиции X, мы можем определить, подходит ли фигура слева. Если он подходит, мы соответствующим образом обновляем текущую позицию X.

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

Когда пользователь нажимает клавишу «вниз», нам нужно обрабатывать вертикальное движение фигуры. Поскольку верхняя левая позиция игрового поля всегда (0, 0), мы можем просто увеличить позицию Y, чтобы переместить фигуру вниз. Мы выполняем проверки, чтобы убедиться, что перемещение фигуры влево, вправо или вниз удерживает ее в пределах игрового поля.

Чтобы оптимизировать код, мы можем заменить вложенные операторы if логическими операторами AND. Это упрощает код и повышает его лаконичность. Кроме того, мы используем условные операторы для добавления или вычитания 1 из текущей позиции X на основе результата условия, что еще больше упрощает код. Та же оптимизация применяется при обработке поворота фигуры, когда пользователь нажимает клавишу «Z».

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

Чтобы зафиксировать текущую фигуру на игровом поле, мы обновляем массив полей значениями из массива тетромино. Это делается путем перебора каждого элемента массива тетромино и обновления соответствующей позиции в массиве полей. Если элемент в массиве тетромино представляет собой «X», мы увеличиваем соответствующее значение в массиве полей на 1. Это помечает эту позицию как занятую текущей фигурой.

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

После визуального указания завершенной линии нам нужно обработать очистку линии и соответствующим образом обновить игровое поле. Мы перебираем каждую строку игрового поля, начиная снизу, и проверяем, заполнена ли строка. Если строка заполнена, мы очищаем ее, устанавливая все ее элементы в 0. Затем мы перемещаем все строки над ней вниз на одну позицию, чтобы заполнить очищенную строку. Этот процесс повторяется до тех пор, пока все заполненные строки не будут очищены.

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

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

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

Таким образом, этот код реализует обработку ввода с клавиатуры для игры, уделяя особое внимание таким клавишам, как клавиши со стрелками и клавиша «Z». Он проверяет состояние этих клавиш, соответствующим образом обрабатывает движение игровой фигуры, реализует гравитацию и блокировку фигур, очищает завершенные линии, обновляет игровое поле, отслеживает счет игрока и проверяет условия окончания игры. Игровой цикл обеспечивает регулярное обновление состояния игры, создавая динамичный и интерактивный игровой процесс.

Code-It-Yourself! Tetris - Programming from Scratch (Quick and Simple C++)
Code-It-Yourself! Tetris - Programming from Scratch (Quick and Simple C++)
  • 2017.04.03
  • www.youtube.com
I mentioned in an earlier video that programming a Tetris clone is a good way to get going with programming as it makes you think about algorithms. Putting m...
 

ПОЛНЫЙ КУРС C++ для начинающих (изучите C++ за 10 часов)


ПОЛНЫЙ КУРС C++ для начинающих (изучите C++ за 10 часов)

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

Содержание:
00:00:00
– Цели курса
00:01:31 – Сделайте это перед началом курса
00:02:41
– Введение в C++ (Что такое C++? Какие приложения можно создавать на C++? Зачем был создан C++?)
00:06:39 – Что такое исходный код, объектный код, компилятор, алгоритм?
00:08:42
- Visual Studio 2019 – Создание первого проекта (настройка)
00:11:32 — Объяснение основ Visual Studio 2019 и первая программа «Hello World»
00:29:51
- Знакомство с переменными
00:44:36 – Правила именования переменных
00:52:15
– Типы данных в C++ и как использовать оператор sizeof
01:01:58
- Переполнение типа данных
01:05:00 – Что такое таблица ASCII
01:09:50
- Простая веселая программа для кодирования слов в ASCII
01:18:12 - Оператор if/else (Создайте программу, которая проверяет нечетные/четные числа + объяснение блок-схемы)
01:35:52 - Вложенный оператор if/else (соберите программу, определяющую тип треугольника + блок-схему)
01:55:50 - Операторы в C++ (арифметические, реляционные, логические, операторы присваивания)
02:21:02 - Перестановка значений двух переменных с третьей переменной или без нее
02:29:20 – Создание приложения «Калькулятор ИМТ» + блок-схема
02:49:55 - Тернарный (условный) оператор (Создайте приложение для игры в угадайку)
03:01:00 - Оператор Switch/case, часть 1 (приложение Build Calculator)
03:26:36 - Оператор Switch/case, часть 2 (Сборка программы, которая проверяет количество дней в месяце)
03:39:35
- Цикл While, часть 1 + пример бесконечного цикла
03:53:39 - Цикл While часть 2 (Создаем программу для подсчета цифр числа)
04:12:39
- Цикл While, часть 3 (Создание программы для перестановки цифр числа)
04:25:25
- Цикл do while (Программа для проверки PIN-кода)
04:39:09 – В чем разница между циклом While и циклом Do While
04:40:34 - Цикл for (Создать программу для вычисления факториала числа)
04:58:12 — Вложенные циклы (вложенные циклы while и for)
05:11:08 — Вложенный цикл for (приложение «Построить таблицу умножения»)
05:21:45 – Программа для рисования прямоугольника
05:33:05 – Программа для рисования треугольников и перевернутых/перевернутых треугольников
05:44:30 – Знакомство с функциями
05:56:02 — Функции с параметрами/аргументами (несколько и по умолчанию)
06:11:42
- Оператор возврата функции (Сборка программы для проверки простых чисел)
06:37:39
- Перегрузка функции
06:48:06 – Создание приложения для банкомата
07:03:03 - Общие функции и шаблоны
07:14:30 – Рекурсия и рекурсивные функции
07:30:01
– Введение в ООП, Что такое классы и объекты
07:42:06
– Конструкторы ООП и методы класса
07:57:10 — Инкапсуляция ООП, GIT: https://github.com/TrueCodeBeauty/EncapsulationCpp
08:08:31 — Наследование ООП, GIT: https://github.com/TrueCodeBeauty/InheritanceCpp
08:24:59 — ООП-полиморфизм, GIT: https://github.com/TrueCodeBeauty/PolymorphismCpp
08:40:04 - Знакомство с указателями
08:51:14 - Пустые указатели
09:06:27 - Указатели и массивы
09:19:18
- Вернуть несколько значений из функции с помощью указателей
09:34:50
- Динамические массивы, создание/изменение массивов во время выполнения
09:48:35 – Многомерные динамические массивы, Двумерный массив
10:07:00
- Обнаружение ошибок в коде с помощью PVS Studio
10:17:19 - Объяснение утечек памяти
10:26:25 - Ошибки
C++ FULL COURSE For Beginners (Learn C++ in 10 hours)
C++ FULL COURSE For Beginners (Learn C++ in 10 hours)
  • 2021.01.11
  • www.youtube.com
This is a full C++ programming course. It consists of many lectures whose goal is to take you from beginner to advanced programming level.I recommend watchin...
 

C++ FUNCTIONS (2020) — Что такое функции?


C++ FUNCTIONS (2020) — Что такое функции? РУКОВОДСТВО ПО ПРОГРАММИРОВАНИЮ

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

Прежде чем мы начнем, подпишитесь на мой канал и нажмите на значок колокольчика, чтобы получать уведомления, когда я опубликую следующее видео. Если вам интересно увидеть закулисный контент и то, как на самом деле выглядит жизнь разработчиков, подписывайтесь на меня в Instagram и Twitter через мои аккаунты «CodeBeauty».

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

Чтобы создать свою собственную функцию, вам нужно знать несколько вещей. Во-первых, вам нужно указать тип возвращаемого значения функции. Сейчас мы будем использовать возвращаемый тип «void», что означает, что функция ничего не возвращает. Затем вы даете имя своей функции. Внутри круглых скобок вы можете определить любые аргументы или параметры, которые получает ваша функция. В этом случае у нас не будет никаких аргументов, поэтому скобки пусты. Наконец, вы определяете тело функции в фигурных скобках.

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

После компиляции и запуска программы вы увидите вывод «Hello from main», за которым следует «Hello from function». Это связано с тем, что сначала выполняется основная функция, а затем функция, которую мы создали, выполняется при ее вызове.

Чтобы сделать ваш код более читабельным, рекомендуется объявлять и определять ваши функции отдельно. Объявление включает тип возвращаемого значения, имя функции и любые параметры, и оно должно быть помещено перед основной функцией. Определение, содержащее тело функции, помещается после основной функции. Таким образом, если кто-то еще читает ваш код, он может легко перейти к конкретной функции, которую ему нужно понять.

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

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

C++ FUNCTIONS (2020) - What are functions? PROGRAMMING TUTORIAL
C++ FUNCTIONS (2020) - What are functions? PROGRAMMING TUTORIAL
  • 2020.06.11
  • www.youtube.com
This is the introduction video of the "C++ functions" course. In this video, I'm explaining what are C++ functions, how functions are created, when they're u...
 

C++ FUNCTIONS (2020) - Что такое параметр/аргумент функции (несколько, по умолчанию) РУКОВОДСТВО ПО ПРОГРАММИРОВАНИЮ


C++ FUNCTIONS (2020) - Что такое параметр/аргумент функции (несколько, по умолчанию) РУКОВОДСТВО ПО ПРОГРАММИРОВАНИЮ

Всем привет! Добро пожаловать обратно на мой канал. Если вы новичок в C++, я рад, что вы здесь. Прежде чем мы углубимся в сегодняшнюю тему, я хочу напомнить вам проверить мой плейлист C++ для начинающих. Он охватывает основные понятия и включает множество упражнений, которые помогут вам практиковаться. Кроме того, не забудьте подписаться на мой канал и нажать на значок колокольчика, чтобы получать уведомления всякий раз, когда я выпускаю новое видео. Вы также можете следить за мной в моих профилях в социальных сетях, Instagram и Twitter CodeBeauty, чтобы заглянуть в жизнь разработчика. Ладно, без лишних слов, давайте приступим к сегодняшнему уроку.

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

Теперь давайте узнаем, как создать функцию, которая принимает параметры на C++. Для этого мы определяем функцию с возвращаемым типом void. Назовем функцию «представить меня». Внутри скобок мы указываем параметры, которые получит функция. Тело нашей функции будет заключено в фигурные скобки.

Чтобы определить параметр, мы начинаем с указания типа параметра, за которым следует его имя. В нашем случае мы хотим передать в функцию имя нашего пользователя, поэтому параметр будет строкового типа. Мы назовем параметр «имя». Затем функция представит нашего пользователя, напечатав «Меня зовут», а затем указанное имя.

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

Когда мы запустим программу, функция успешно представит пользователя с указанным именем. Он напечатает «Меня зовут Селена», как и ожидалось.

Если мы хотим ввести несколько пользователей, мы можем снова вызвать функцию с другими аргументами. Например, мы можем скопировать строку вызова и передать другое имя, например «Анна». Затем функция соответственно представит обоих пользователей.

Теперь давайте рассмотрим передачу нескольких аргументов в функцию. Для этого разделяем параметры запятыми. Помимо параметра name добавим еще два параметра: city (типа string) и age (типа int). Мы изменим функцию, включив в нее информацию о городе и возрасте пользователя.

Внутри функции мы будем использовать «cout» C++ для вывода города и возраста пользователя вместе с его именем. Структурируем вывод следующим образом: «Я из [города], мне [возраст] лет».

Когда мы вызываем функцию, мы передаем значения для всех трех параметров: имя, город и возраст. Например, мы можем вызвать функцию и передать «Селена» в качестве имени, «Москва» в качестве города и 25 в качестве возраста. Функция ознакомит пользователя со всей предоставленной информацией.

Мы можем повторить процесс для второго пользователя. Давайте обозначим «Анну» как имя, «Нью-Йорк» как город и 27 как возраст. Когда мы запустим программу, мы увидим, что оба пользователя были представлены со своими соответствующими данными.

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

Чтобы указать значение по умолчанию, мы присваиваем его во время объявления параметра. Например, давайте установим значение по умолчанию для параметра «возраст» равным 18. Теперь, если мы вызовем функцию без указания возраста, она примет значение по умолчанию.

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

На этом мы завершаем обсуждение параметров и аргументов функций C++. Я надеюсь, что вы нашли это видео полезным и у вас есть четкое представление о том, как работать с параметрами функций в C++. Если у вас есть какие-либо вопросы или вам нужны дополнительные разъяснения, оставьте комментарий ниже, и я буду рад помочь вам. Следите за дальнейшими руководствами по C++, и не забудьте поставить отметку "Нравится" и поделиться этим видео, если оно показалось вам ценным. Спасибо за просмотр и удачного кодирования!

C++ FUNCTIONS (2020) - What is function parameter/argument (multiple, default) PROGRAMMING TUTORIAL
C++ FUNCTIONS (2020) - What is function parameter/argument (multiple, default) PROGRAMMING TUTORIAL
  • 2020.06.15
  • www.youtube.com
In this video of the "C++ functions" course, I'm explaining what are function parameters/arguments, how to pass arguments to a function, and how to invoke a ...
 

C++ FUNCTIONS (2020) — Оператор возврата функций, Как проверить простое число


C++ FUNCTIONS (2020) - Оператор возврата функций, Как проверить простое число РУКОВОДСТВО ПО ПРОГРАММИРОВАНИЮ

Всем привет, добро пожаловать на мой канал. В этом видео я хочу обсудить операторы возврата и возвращаемые типы функций в C++. Если вы новичок, обязательно ознакомьтесь с моим курсом C++ для начинающих, в котором приведены полезные примеры, которые помогут вам начать изучение C++. Не забудьте подписаться на мой канал и нажать на колокольчик, чтобы быть в курсе новых видео. Кроме того, если вы заинтересованы в том, чтобы стать разработчиком и получить представление о жизни разработчика, подписывайтесь на меня в Instagram и Twitter на @truecodebeauty (ссылки в описании видео). Без лишних слов, давайте углубимся в сегодняшнюю тему.

Тип возвращаемого значения функции может быть любым типом данных, включая int, float, bool, char, double или даже пользовательские типы данных. Он также может быть пустым, что указывает на то, что функция ничего не возвращает. В предыдущих видео я объяснял, что функция — это блок кода, предназначенный для выполнения определенной задачи. Функции можно разделить на два типа: возвращающие значение и не возвращающие.

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

Чтобы проиллюстрировать важность функций, давайте рассмотрим пример без использования функций. Мы создадим программу для определения, является ли число простым или нет. Простое число делится только на единицу и само на себя. Сначала мы попросим пользователя ввести число. Затем мы перебираем все числа от 2 до введенного пользователем числа минус 1. Если число делится на любое из этих значений, оно не является простым. В противном случае это премьер. Наконец, мы покажем результат.

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

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

C++ FUNCTIONS (2020) - Functions return statement, How to check prime number PROGRAMMING TUTORIAL
C++ FUNCTIONS (2020) - Functions return statement, How to check prime number PROGRAMMING TUTORIAL
  • 2020.06.29
  • www.youtube.com
In this video of the "C++ functions" course, I'm explaining what is the function return type. I'll show you how to return value from a function on an example...
 

C++ FUNCTIONS (2020) — Что такое перегрузка функций? РУКОВОДСТВО ПО ПРОГРАММИРОВАНИЮ


C++ FUNCTIONS (2020) — Что такое перегрузка функций? РУКОВОДСТВО ПО ПРОГРАММИРОВАНИЮ

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

Для начала давайте откроем нашу Visual Studio и создадим функцию под названием «сумма». Мы начнем с определения возвращаемого типа нашей функции, который будет целым числом. Если вы не знакомы с типами возврата, рекомендую посмотреть мое видео по теме (ссылка предоставлена). Далее мы укажем имя нашей функции как «сумма» и объявим два параметра. Оба параметра будут целочисленного типа, и мы назовем их «a» и «b» соответственно.

Теперь давайте создадим еще одну функцию с тем же именем «сумма», но на этот раз с возвращаемым типом double. Мы объявим два параметра типа double с именами «a» и «b».

Кроме того, давайте создадим третью функцию с именем «сумма» с возвращаемым типом числа с плавающей запятой. На этот раз мы передадим три параметра, все они будут типа float. Мы назовем их «а», «б» и «в» соответственно.

После объявления наших функций мы замечаем, что они подчеркнуты, указывая на отсутствие их определений. Давайте продолжим, предоставив определения для каждой функции. Мы начнем с первой функции, которая возвращает целое число.

Внутри фигурных скобок мы определим переменную под названием «результат» типа int. Мы присвоим ему значение «a + b», которое представляет собой сумму двух параметров. Наконец, мы будем использовать ключевое слово «return», чтобы вернуть значение «result» из функции.

В качестве альтернативы, вместо создания отдельной переменной, мы можем напрямую вернуть сумму «a» и «b», не присваивая ее переменной. Это может сделать код короче и читабельнее.

Далее давайте определим вторую функцию, которая возвращает значение типа double. Мы скопируем объявление, добавим фигурные скобки, а внутри мы будем использовать ключевое слово «return», за которым следует «a + b». Поскольку параметры имеют тип double, сумма будет выполняться с двойной точностью.

Теперь давайте определим третью функцию, которая возвращает число с плавающей запятой. Мы скопируем объявление, добавим фигурные скобки, а внутри мы будем использовать ключевое слово «return», за которым следует «a + b + c». Опять же, поскольку все параметры имеют тип float, сумма будет выполняться соответствующим образом.

Чтобы протестировать наши функции, мы будем вызывать их в «основной» функции. Мы будем использовать оператор «cout» для отображения результатов. Начнем с вызова первой функции «сумма» и передачи двух целочисленных значений, таких как 4 и 3. Мы выведем результат с помощью «cout» и закончим строку.

Когда мы запускаем программу, мы можем ожидать увидеть результат суммирования 4 и 3, который должен быть 7. Если программа работает успешно, мы проверили нашу первую функцию.

Затем давайте проверим вторую функцию, вызвав «сумму» и передав два двойных значения, например 4,4 и 3,3. Опять же, мы выведем результат с помощью «cout» и закончим строку.

Когда мы запустим программу, мы должны увидеть результат суммирования 4,4 и 3,3, что должно быть 7,7. Если вывод правильный, мы успешно протестировали нашу вторую функцию.

Наконец, давайте проверим третью функцию, вызвав «сумму» и передав три значения с плавающей запятой, например 4,4, 3,3 и 2,2. Мы выведем результат с помощью «cout» и закончим строку.

Запуск программы должен отображать результат суммирования 4.4, 3.3 и 2.2, который должен быть правильной суммой. При необходимости проверьте результат с помощью калькулятора.

Подводя итог, мы продемонстрировали здесь перегрузку функций. Мы создали три функции с одинаковым названием «сумма», но с разными параметрами и типами возвращаемых значений. Первая функция принимает два целых числа, вторая — два числа типа double, а третья — три числа с плавающей запятой. Когда мы вызываем эти функции, компилятор определяет подходящую функцию для вызова на основе предоставленных аргументов.

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

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

Спасибо за просмотр, увидимся в моем следующем видео. Пока!

C++ FUNCTIONS (2020) - What is function overloading? PROGRAMMING TUTORIAL
C++ FUNCTIONS (2020) - What is function overloading? PROGRAMMING TUTORIAL
  • 2020.07.17
  • www.youtube.com
Function overloading is the ability to create multiple functions that have the same name but different implementations. In this video of the C++ programming ...
Причина обращения: