---
title: Основные концепции языка C++
seo:
  title: Основные концепции языка C++ — C++ Developer
  description: Тема «Основные концепции языка C++» для собеседования C++ Developer. В чём заключаются основные принципы ООП? Что такое сложность алгоритма?
---

[Все темы C++ Developer](/c-developer)

## <strong>В чём заключаются основные принципы ООП?</strong> [#q-14bee738d69b81f2bee7f2d9a33fad90]

Основные принципы объектно-ориентированного программирования <code>&#40;ООП&#41;</code> включают в себя четыре ключевых концепции&#58;

1. <strong>Инкапсуляция</strong> - это сокрытие деталей реализации объекта от
   внешнего мира. Это позволяет защитить внутреннее состояние объекта и
   управлять доступом к нему только через определённые методы. Инкапсуляция
   упрощает управление кодом и повышает его безопасность.

1. <strong>Наследование</strong> - позволяет новому классу наследовать свойства
   и методы уже существующего класса. Наследование упрощает повторное
   использование кода и организацию сложных систем.

1. <strong>Полиморфизм</strong> - дает возможность использовать одни и те же
   интерфейсы для разных типов данных. Полиморфизм может быть реализован через
   перегрузку методов (одинаковое название метода, но разные параметры) или
   переопределение методов (одинаковое название и параметры, но разная
   реализация в производных классах).

1. <strong>Абстракция</strong> - позволяет создать упрощённое представление
   сложной системы, выделяя самые значимые свойства и поведения объекта,
   необходимые для практического применения, и исключая менее важные. Это
   упрощает программирование и улучшает читаемость кода.

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

:::note[Ссылки для изучения]

1. [ООП в C++](https://metanit.com/cpp/tutorial/5.1.php)

1. [ООП в картинках](https://habr.com/ru/articles/463125/)
   :::

---

## <strong>Что такое сложность алгоритма?</strong> [#q-14bee738d69b81d683e4c149a3e5396b]

Сложность алгоритма — это оценка ресурсов, которые требуются для выполнения алгоритма. Существуют <strong>два</strong> основных типа сложности&#58;

1. <strong>Временная сложность</strong> <code>&#40;Time Complexity&#41;</code>
   &#58; Описывает количество времени, которое требуется алгоритму для
   выполнения, в зависимости от размера входных данных. Обычно измеряется в
   терминах числа операций или шагов, которые должен выполнить алгоритм.

1. <strong>Пространственная сложность</strong>
   <code>&#40;Space Complexity&#41;</code>&#58; Описывает объём памяти,
   необходимый алгоритму для его работы, также в зависимости от размера входных
   данных. Включает в себя как память, необходимую для хранения входных данных,
   так и дополнительную память, требуемую в процессе работы алгоритма.

Big O задаёт асимптотическую верхнюю границу выбранной функции затрат. Она может описывать худший, средний или амортизированный случай, который следует назвать отдельно. O(n) означает не более линейного роста с точностью до констант, а не обязательно точный линейный рост.

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

:::note[Ссылки для изучения]

1. [Сложность алгоритмов. Разбор Big O notation](https://habr.com/ru/articles/782608/)
   :::

---

## <strong>Объясните такие структуры данных, как стек и очередь</strong> [#q-14bee738d69b8185b25ac4d6cf003d22]

Стек и очередь — это два типа абстрактных структур данных, которые используются для хранения и управления данными в программировании. Обе структуры имеют разные механизмы доступа и управления данными&#58;

#### Стек

Стек — это структура данных, работающая по принципу "последний пришел — первый ушел" <code>&#40;LIFO&#44; Last In First Out&#41;</code>. Это означает, что последний элемент, добавленный в стек, будет первым извлеченным. Основные операции со стеком&#58;

- <code>Push</code>&#58; добавляет элемент на вершину стека.

- <code>Pop</code>&#58; удаляет и возвращает верхний элемент стека.

- <code>Top</code> или <code>Peek</code>&#58; возвращает верхний элемент стека
  без его удаления.

- <code>IsEmpty</code>&#58; проверяет, пуст ли стек.

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

#### Очередь

Очередь — это структура данных, работающая по принципу "первый пришел — первый ушел" <code>&#40;FIFO&#44; First In First Out&#41;</code>. Это означает, что элемент, добавленный первым, также будет первым извлеченным. Основные операции с очередью&#58;

- <code>Enqueue</code>&#58; добавляет элемент в конец очереди.

- <code>Dequeue</code>&#58; удаляет и возвращает первый элемент из начала
  очереди.

- <code>Front</code>&#58; возвращает первый элемент очереди без его удаления.

- <code>IsEmpty</code>&#58; проверяет, пуста ли очередь.

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

:::note[Ссылки для изучения]

1. [10 структур данных, которые должен знать каждый программист](https://practicum.yandex.ru/blog/10-osnovnyh-struktur-dannyh/)
   :::

---

## <strong>Что такое паттерны проектирования, и для чего их используют?</strong> [#q-14bee738d69b812c8aefc4f1b20e8c71]

<strong>Паттерны проектирования</strong> — это проверенные решения типовых
проблем, которые возникают при разработке программного обеспечения. Они
представляют собой описания лучших практик, которые можно повторно использовать
в коде для достижения гибкости, масштабируемости и облегчения поддержки
программ. Использование паттернов помогает улучшить структуру кода, упрощает
коммуникацию между разработчиками и способствует более эффективному решению
архитектурных задач.

:::note[Ссылки для изучения]

1. [Шпаргалка по шаблонам (паттернам) проектирования](https://habr.com/ru/articles/210288/)
   :::
