Forwarded from Библиотека джависта | Java, Spring, Maven, Hibernate
🧠Чему вы бы хотели научиться?
Расскажите нам о ваших пожеланиях: какие навыки вы хотели бы прокачать в ближайшее время или какую профессию хотели бы приобрести?
За прохождение опроса вы получите промокод на скидку 15% на все наши курсы до конца 2024 года.
👉Опрос по ссылке👈
Расскажите нам о ваших пожеланиях: какие навыки вы хотели бы прокачать в ближайшее время или какую профессию хотели бы приобрести?
За прохождение опроса вы получите промокод на скидку 15% на все наши курсы до конца 2024 года.
👉Опрос по ссылке👈
Структуры и классы. Отличия
Структуры и классы — это два базовых концепта объектно-ориентированного программирования, которые используются для создания пользовательских типов данных, но они имеют некоторые отличия:
Инкапсуляция:
— Классы поддерживают инкапсуляцию, что означает, что они могут содержать как данные (переменные-члены), так и методы (функции-члены), которые могут управлять этими данными. Вы можете определять доступ к данным с помощью модификаторов доступа (например, public, private, protected).
— Структуры обычно используются для простых типов данных и обычно не поддерживают инкапсуляцию. В структурах данные, как правило, являются открытыми и доступными непосредственно извне.
Наследование:
— Классы поддерживают наследование, что позволяет создавать новые классы, наследующие свойства и методы от существующих классов. Это способствует повторному использованию кода и созданию иерархии классов.
— Структуры не поддерживают наследование. Вы не можете создать новую структуру, наследующую от другой структуры.
Полиморфизм:
— Классы могут использовать полиморфизм, что означает, что разные классы могут иметь методы с одинаковыми именами, но разной реализацией. Это позволяет использовать абстракции и интерфейсы для обработки объектов разных классов одинаковым образом.
— Структуры также могут использовать полиморфизм, но они обычно не используются для этой цели так часто, как классы.
Значение и ссылка:
— Объекты классов передаются по ссылке, что означает, что когда объект передается в качестве аргумента в функцию или присваивается другой переменной, изменения внутри функции могут повлиять на оригинальный объект.
— Объекты структур передаются по значению, что означает, что копия объекта создается при передаче в функцию, и изменения внутри функции не влияют на оригинальную структуру.
Сравнение:
— Для сравнения объектов классов обычно используется сравнение ссылок (сравнение ссылок на объекты). Два объекта класса с одинаковыми данными будут считаться разными, если они находятся в разных местах памяти.
— Для сравнения объектов структур используется сравнение значений их данных. Два объекта структуры с одинаковыми данными будут считаться равными, даже если они находятся в разных местах памяти.
#для_начинающих
Структуры и классы — это два базовых концепта объектно-ориентированного программирования, которые используются для создания пользовательских типов данных, но они имеют некоторые отличия:
Инкапсуляция:
— Классы поддерживают инкапсуляцию, что означает, что они могут содержать как данные (переменные-члены), так и методы (функции-члены), которые могут управлять этими данными. Вы можете определять доступ к данным с помощью модификаторов доступа (например, public, private, protected).
— Структуры обычно используются для простых типов данных и обычно не поддерживают инкапсуляцию. В структурах данные, как правило, являются открытыми и доступными непосредственно извне.
Наследование:
— Классы поддерживают наследование, что позволяет создавать новые классы, наследующие свойства и методы от существующих классов. Это способствует повторному использованию кода и созданию иерархии классов.
— Структуры не поддерживают наследование. Вы не можете создать новую структуру, наследующую от другой структуры.
Полиморфизм:
— Классы могут использовать полиморфизм, что означает, что разные классы могут иметь методы с одинаковыми именами, но разной реализацией. Это позволяет использовать абстракции и интерфейсы для обработки объектов разных классов одинаковым образом.
— Структуры также могут использовать полиморфизм, но они обычно не используются для этой цели так часто, как классы.
Значение и ссылка:
— Объекты классов передаются по ссылке, что означает, что когда объект передается в качестве аргумента в функцию или присваивается другой переменной, изменения внутри функции могут повлиять на оригинальный объект.
— Объекты структур передаются по значению, что означает, что копия объекта создается при передаче в функцию, и изменения внутри функции не влияют на оригинальную структуру.
Сравнение:
— Для сравнения объектов классов обычно используется сравнение ссылок (сравнение ссылок на объекты). Два объекта класса с одинаковыми данными будут считаться разными, если они находятся в разных местах памяти.
— Для сравнения объектов структур используется сравнение значений их данных. Два объекта структуры с одинаковыми данными будут считаться равными, даже если они находятся в разных местах памяти.
#для_начинающих
Что делает std::string::at()?
std::string::at() — это функция, предоставляемая классом std::string для доступа к отдельным символам в строке. Она принимает индекс в качестве аргумента и возвращает символ в указанной позиции.
Функция at() выполняет проверку границы (boundary check), что означает, что она проверяет, находится ли переданный индекс в пределах допустимых значений для строки. Если индекс находится вне диапазона, генерируется исключение std::out_of_range. Это отличается от оператора [], который не выполняет такую проверку.
std::string::at() — это функция, предоставляемая классом std::string для доступа к отдельным символам в строке. Она принимает индекс в качестве аргумента и возвращает символ в указанной позиции.
Функция at() выполняет проверку границы (boundary check), что означает, что она проверяет, находится ли переданный индекс в пределах допустимых значений для строки. Если индекс находится вне диапазона, генерируется исключение std::out_of_range. Это отличается от оператора [], который не выполняет такую проверку.
Декларатор ссылки lvalue: &
Содержит адрес объекта, но синтаксически ведет себя подобно объекту.
Ссылку lvalue можно считать другим именем для объекта. Объявление ссылки lvalue состоит из необязательного списка спецификаторов, за которым следует декларатор ссылки. Ссылка должна быть инициализирована и не может быть изменена.
Любой объект, адрес которого можно преобразовать в некоторый тип указателя, можно также преобразовать в аналогичный ссылочный тип. Например, любой объект, адрес которого можно преобразовать в тип char *, можно также преобразовать в тип char &.
В примере демонстрируется декларатор ссылки путем объявления объекта Person и ссылки на этот объект. Поскольку rFriend является ссылкой на myFriend, при обновлении любой из этих переменных изменяется один и тот же объект.
Содержит адрес объекта, но синтаксически ведет себя подобно объекту.
Ссылку lvalue можно считать другим именем для объекта. Объявление ссылки lvalue состоит из необязательного списка спецификаторов, за которым следует декларатор ссылки. Ссылка должна быть инициализирована и не может быть изменена.
Любой объект, адрес которого можно преобразовать в некоторый тип указателя, можно также преобразовать в аналогичный ссылочный тип. Например, любой объект, адрес которого можно преобразовать в тип char *, можно также преобразовать в тип char &.
В примере демонстрируется декларатор ссылки путем объявления объекта Person и ссылки на этот объект. Поскольку rFriend является ссылкой на myFriend, при обновлении любой из этих переменных изменяется один и тот же объект.
Какая разница между структурой и классом?
Главное отличие заключается в том, что структуры по умолчанию имеют public доступ к своим полям, в то время как классы по умолчанию имеют private доступ.
— Структуры обычно используются для простых объектных типов данных, в то время как классы — для более сложных объектов.
— Структуры копируются по значению, а классы — по ссылке. Это означает, что при копировании структуры создается новый объект, а при копировании класса копируется указатель на объект.
— Структуры не поддерживают наследование, в отличие от классов.
В целом, структуры чаще используются для простых данных, а классы — для представления более сложных сущностей и их взаимодействия.
Выбор между ними зависит от конкретной задачи и требований к программе.
Главное отличие заключается в том, что структуры по умолчанию имеют public доступ к своим полям, в то время как классы по умолчанию имеют private доступ.
— Структуры обычно используются для простых объектных типов данных, в то время как классы — для более сложных объектов.
— Структуры копируются по значению, а классы — по ссылке. Это означает, что при копировании структуры создается новый объект, а при копировании класса копируется указатель на объект.
— Структуры не поддерживают наследование, в отличие от классов.
В целом, структуры чаще используются для простых данных, а классы — для представления более сложных сущностей и их взаимодействия.
Выбор между ними зависит от конкретной задачи и требований к программе.
Forwarded from Книги для C/C++ разработчиков
Please open Telegram to view this post
VIEW IN TELEGRAM
std::find_if
std::find_if — это стандартный алгоритм, предоставляемый библиотекой . Этот алгоритм предназначен для поиска первого элемента в заданном диапазоне, который удовлетворяет заданному условию, определенному предикатом.
Вот общий формат std::find_if:
#include
template
InputIt find_if(InputIt first, InputIt last, UnaryPredicate p);
first и last представляют диапазон элементов для поиска. first указывает на начало диапазона, а last указывает за его пределы.
p — это унарный предикат, то есть функция, принимающая один аргумент и возвращающая true, если элемент удовлетворяет условию, и false в противном случае.
std::find_if — это стандартный алгоритм, предоставляемый библиотекой . Этот алгоритм предназначен для поиска первого элемента в заданном диапазоне, который удовлетворяет заданному условию, определенному предикатом.
Вот общий формат std::find_if:
#include
template
InputIt find_if(InputIt first, InputIt last, UnaryPredicate p);
first и last представляют диапазон элементов для поиска. first указывает на начало диапазона, а last указывает за его пределы.
p — это унарный предикат, то есть функция, принимающая один аргумент и возвращающая true, если элемент удовлетворяет условию, и false в противном случае.
Библиотечный метод
Продемонстрируйте работу метода сортировки вставками по возрастанию. Для этого выведите состояние данного массива после каждой вставки на отдельных строках. Если массив упорядочен изначально, не нужно ничего выводить.
Формат входных данных:
На первой строке дано целое число n (1 ≤ n ≤ 100) — количество элементов в массиве. На второй строке задан сам массив: последовательность натуральных чисел, не превышающих 10^9.
Формат выходных данных:
В выходной файл выведите строки (по количеству вставок) по n чисел каждая.
Продемонстрируйте работу метода сортировки вставками по возрастанию. Для этого выведите состояние данного массива после каждой вставки на отдельных строках. Если массив упорядочен изначально, не нужно ничего выводить.
Формат входных данных:
На первой строке дано целое число n (1 ≤ n ≤ 100) — количество элементов в массиве. На второй строке задан сам массив: последовательность натуральных чисел, не превышающих 10^9.
Формат выходных данных:
В выходной файл выведите строки (по количеству вставок) по n чисел каждая.
std::conditional_variable
Стандартная библиотека предоставляет два компонента для работы с многопоточностью: std::thread для создания и управления потоками и std::mutex для обеспечения синхронизации доступа к общим данным. Для синхронизации потоков при ожидании определенных условий используется std::condition_variable.
std::condition_variable представляет собой механизм, который позволяет одному потоку ждать, пока другой поток выполняет определенные действия, и затем оповещать первый поток о завершении выполнения этих действий. Она используется вместе с std::unique_lock (или другими мьютексами) для ожидания изменения состояния.
Стандартная библиотека предоставляет два компонента для работы с многопоточностью: std::thread для создания и управления потоками и std::mutex для обеспечения синхронизации доступа к общим данным. Для синхронизации потоков при ожидании определенных условий используется std::condition_variable.
std::condition_variable представляет собой механизм, который позволяет одному потоку ждать, пока другой поток выполняет определенные действия, и затем оповещать первый поток о завершении выполнения этих действий. Она используется вместе с std::unique_lock (или другими мьютексами) для ожидания изменения состояния.
Перегрузка функций
Перегрузка функций — это возможность определения нескольких функций с одним и тем же именем, но разными параметрами. Когда вызывается такая функция, компилятор определяет, какая из перегруженных функций должна быть вызвана, основываясь на типах аргументов, переданных при вызове.
Таким образом можно создать несколько вариантов функции, которые выполняют аналогичные действия, но принимают разные типы аргументов. Это позволяет создавать более удобный и интуитивно понятный интерфейс для программистов, так как они могут вызывать одно и то же имя функции с разными типами данных, не заботясь о различиях в именах функций.
Перегрузка функций — это возможность определения нескольких функций с одним и тем же именем, но разными параметрами. Когда вызывается такая функция, компилятор определяет, какая из перегруженных функций должна быть вызвана, основываясь на типах аргументов, переданных при вызове.
Таким образом можно создать несколько вариантов функции, которые выполняют аналогичные действия, но принимают разные типы аргументов. Это позволяет создавать более удобный и интуитивно понятный интерфейс для программистов, так как они могут вызывать одно и то же имя функции с разными типами данных, не заботясь о различиях в именах функций.
🧑💻 Статьи для IT: как объяснять и распространять значимые идеи
Напоминаем, что у нас есть бесплатный курс для всех, кто хочет научиться интересно писать — о программировании и в целом.
Что: семь модулей, посвященных написанию, редактированию, иллюстрированию и распространению публикаций.
Для кого: для авторов, копирайтеров и просто программистов, которые хотят научиться интересно рассказывать о своих проектах.
👉Материалы регулярно дополняются, обновляются и корректируются. А еще мы отвечаем на все учебные вопросы в комментариях курса.
Напоминаем, что у нас есть бесплатный курс для всех, кто хочет научиться интересно писать — о программировании и в целом.
Что: семь модулей, посвященных написанию, редактированию, иллюстрированию и распространению публикаций.
Для кого: для авторов, копирайтеров и просто программистов, которые хотят научиться интересно рассказывать о своих проектах.
👉Материалы регулярно дополняются, обновляются и корректируются. А еще мы отвечаем на все учебные вопросы в комментариях курса.
-35% на курс по алгоритмам
🎄 Новый год начинается с подарков, а хороший подарок для себя — новые знания со скидкой 35%!
🌟«Алгоритмы и структуры данных» — 23 390 ₽ (вместо 35 990 ₽)
Полугодовая программа от преподавателей МФТИ и НИУ ВШЭ, которая включает в себя все необходимые знания по алгоритмам для работы.
Самое ценное — это развернутая обратная связь по всем вашим домашним заданиям, а также ссылки на полезные дополнительные материалы.
У вас не будет шансов не усвоить какие-то темы курса👌
🔥 Переходите и активируйте вводные занятия курса — https://proglib.io/w/ff97c30a
🎄 Новый год начинается с подарков, а хороший подарок для себя — новые знания со скидкой 35%!
🌟«Алгоритмы и структуры данных» — 23 390 ₽ (вместо 35 990 ₽)
Полугодовая программа от преподавателей МФТИ и НИУ ВШЭ, которая включает в себя все необходимые знания по алгоритмам для работы.
Самое ценное — это развернутая обратная связь по всем вашим домашним заданиям, а также ссылки на полезные дополнительные материалы.
У вас не будет шансов не усвоить какие-то темы курса👌
🔥 Переходите и активируйте вводные занятия курса — https://proglib.io/w/ff97c30a
Напишите программу на C++, которая запрашивает у пользователя два числа и выполняет одну из простых математических операций: сложение, вычитание, умножение или деление. Пользователь должен вводить операцию в виде символа (+, -, *, /).
Подсказка: Используйте конструкцию switch для выполнения различных операций.
Решение:
1. Переменные: Определить переменные для чисел и операции.
2. Ввод данных: Запросить у пользователя два числа и символ операции.
3. Выбор операции: Использовать switch для определения типа операции.
4. Выполнение операции: Выполнить выбранную операцию, учитывая возможные ошибки (деление на ноль).
5. Вывод результата: Вывести результат операции.
6. Обработка ошибок: В случае ошибки вывести сообщение и завершить программу.
7. Возвращение значения: Вернуть 0 при успешном завершении, ненулевой код при ошибке.
Подсказка: Используйте конструкцию switch для выполнения различных операций.
Решение:
1. Переменные: Определить переменные для чисел и операции.
2. Ввод данных: Запросить у пользователя два числа и символ операции.
3. Выбор операции: Использовать switch для определения типа операции.
4. Выполнение операции: Выполнить выбранную операцию, учитывая возможные ошибки (деление на ноль).
5. Вывод результата: Вывести результат операции.
6. Обработка ошибок: В случае ошибки вывести сообщение и завершить программу.
7. Возвращение значения: Вернуть 0 при успешном завершении, ненулевой код при ошибке.
program_invocation_name
Переменная program_invocation_name содержит имя, которое было использовано для запуска вызвавшей программы. Это значение совпадает с argv[0] в main(); отличие в том, что program_invocation_name — глобальная переменная.
Переменная program_invocation_short_name содержит базовую часть имени, которое было использовано для запуска вызвавшей программы. То есть её значение совпадает с началом program_invocation_name до последней косой черты (/).
Эти переменные автоматически инициализируются glibc при запуске программы.
Переменная program_invocation_name содержит имя, которое было использовано для запуска вызвавшей программы. Это значение совпадает с argv[0] в main(); отличие в том, что program_invocation_name — глобальная переменная.
Переменная program_invocation_short_name содержит базовую часть имени, которое было использовано для запуска вызвавшей программы. То есть её значение совпадает с началом program_invocation_name до последней косой черты (/).
Эти переменные автоматически инициализируются glibc при запуске программы.
SFML
SFML (Simple and Fast Multimedia Library) — это библиотека, предназначенная для разработки мультимедийных приложений, включая 2D и 3D игры, аудио и видео. Она предоставляет доступ к различным мультимедийным ресурсам и упрощает работу с графикой, аудио, сетью и вводом.
Вот основные шаги для использования SFML в C++:
1. Сначала установите библиотеку SFML на вашем компьютере. Вы можете скачать библиотеку с официального сайта SFML (https://www.sfml-dev.org/) и следовать инструкциям по установке для вашей операционной системы.
2. Создайте новый проект C++ в вашей среде разработки (например, Visual Studio, Code::Blocks, CLion и др.).
3. Вам нужно убедиться, что ваш проект настроен для использования SFML. Для этого укажите пути к заголовочным файлам и библиотекам SFML в настройках проекта.
4. Ваш код будет включать заголовочные файлы SFML и вызов функций для работы с графикой, аудио и другими мультимедийными ресурсами.
5. Скомпилируйте свой проект с учетом настроек SFML, и запустите его.
SFML (Simple and Fast Multimedia Library) — это библиотека, предназначенная для разработки мультимедийных приложений, включая 2D и 3D игры, аудио и видео. Она предоставляет доступ к различным мультимедийным ресурсам и упрощает работу с графикой, аудио, сетью и вводом.
Вот основные шаги для использования SFML в C++:
1. Сначала установите библиотеку SFML на вашем компьютере. Вы можете скачать библиотеку с официального сайта SFML (https://www.sfml-dev.org/) и следовать инструкциям по установке для вашей операционной системы.
2. Создайте новый проект C++ в вашей среде разработки (например, Visual Studio, Code::Blocks, CLion и др.).
3. Вам нужно убедиться, что ваш проект настроен для использования SFML. Для этого укажите пути к заголовочным файлам и библиотекам SFML в настройках проекта.
4. Ваш код будет включать заголовочные файлы SFML и вызов функций для работы с графикой, аудио и другими мультимедийными ресурсами.
5. Скомпилируйте свой проект с учетом настроек SFML, и запустите его.