Bladeren bron

Загрузить файлы 'Лекции/C++'

u20kovalev_den 3 weken geleden
bovenliggende
commit
53a51cf061

BIN
Лекции/C++/cpp1.png


BIN
Лекции/C++/cpp2.png


+ 21 - 0
Лекции/C++/Вопросы_Шайдуко.md

@@ -0,0 +1,21 @@
+# Вопросы и ответы
+
+Почему C++ считается системным языком программирования?
+
+C++ считается системным языком, поскольку предоставляет прямой контроль над памятью, ресурсами и моделью выполнения программы.
+
+В чём заключается принцип RAII в C++?
+
+RAII связывает время жизни ресурса с временем жизни объекта, гарантируя автоматическое освобождение ресурсов.
+
+Какую роль играют шаблоны в C++?
+
+Шаблоны позволяют реализовывать обобщённое программирование без потери производительности за счёт компиляции на этапе сборки.
+
+Чем компиляция C++ отличается от интерпретируемых языков?
+
+Код C++ преобразуется в нативный машинный код до выполнения программы, что снижает накладные расходы.
+
+Почему современный C++ использует умные указатели?
+
+Умные указатели применяются для безопасного управления памятью и предотвращения утечек ресурсов.

+ 26 - 0
Лекции/C++/Шайдуко_C++.md

@@ -0,0 +1,26 @@
+# C++ как системный язык программирования общего назначения
+
+**C++ — это компилируемый язык программирования**, ориентированный на разработку высокопроизводительных и ресурсоэффективных приложений. Он широко применяется в системном программировании, разработке игровых движков, финансовых платформ, встроенных систем и высоконагруженных серверов. Ключевой особенностью C++ является сочетание **низкоуровневого контроля над памятью** и **высокоуровневых абстракций**, что делает язык универсальным, но требовательным к квалификации разработчика.
+
+С архитектурной точки зрения C++ предоставляет прямой доступ к управлению ресурсами: памяти, потокам, файловым дескрипторам. В отличие от языков с автоматическим управлением памятью, C++ использует детерминированную модель времени жизни объектов, основанную на **RAII (Resource Acquisition Is Initialization)**. Этот принцип позволяет связывать владение ресурсом с временем жизни объекта и гарантирует корректное освобождение ресурсов даже при возникновении исключений.
+
+![Alt](cpp1.png)
+
+Современный C++ (начиная с C++11 и далее) активно развивает парадигмы **обобщённого программирования**, **метапрограммирования** и **параллельных вычислений**. Шаблоны позволяют создавать типобезопасные и переиспользуемые компоненты без потери производительности, поскольку все обобщения разрешаются на этапе компиляции. Это критически важно для библиотек стандартной библиотеки (STL), таких как `vector`, `map` и `algorithm`.
+
+Отдельного внимания заслуживает модель компиляции C++. Процесс включает стадии препроцессинга, компиляции, ассемблирования и линковки. Ошибки могут возникать на любой из этих стадий, что требует от разработчика понимания не только синтаксиса языка, но и устройства инструментальной цепочки (compiler toolchain). Именно поэтому C++ часто рассматривается как язык, формирующий **инженерное мышление**.
+
+## Таблица 1. Ключевые особенности языка C++
+
+| Особенность        | Описание                         | Практическое значение                   |
+| ------------------ | -------------------------------- | --------------------------------------- |
+| Управление памятью | Ручное или через умные указатели | Максимальный контроль над ресурсами     |
+| RAII               | Связывание ресурсов с объектами  | Надёжность и безопасность               |
+| Шаблоны            | Обобщённое программирование      | Высокая производительность без overhead |
+| Компиляция         | Генерация нативного кода         | Минимальные накладные расходы           |
+
+Современная практика разработки на C++ предполагает активное использование **умных указателей** (`std::unique_ptr`, `std::shared_ptr`), стандартных контейнеров и статического анализа кода. Это снижает вероятность ошибок управления памятью и повышает сопровождаемость проектов, не жертвуя производительностью.
+
+![Alt](cpp2.png)
+
+Таким образом, **C++ остаётся одним из самых мощных инструментов в арсенале разработчика**, позволяя создавать предсказуемые, быстрые и масштабируемые системы при условии строгого соблюдения инженерных практик и стандартов кодирования.