Курс C++
НЕТ ВОЙНЕ |
24 февраля 2022 года российское руководство во главе с Владимиром Путиным развязало агрессивную войну против Украины. В глазах всего мира это военное преступление совершено от лица всей страны, всех россиян. Будучи гражданами Российской Федерации, мы против своей воли оказались ответственными за нарушение международного права, военное вторжение и массовую гибель людей. Чудовищность совершенного преступления не оставляет возможности промолчать или ограничиться пассивным несогласием. Мы убеждены в абсолютной ценности человеческой жизни, в незыблемости прав и свобод личности. Режим Путина — угроза этим ценностям. Наша задача — обьединить все силы для сопротивления ей. Эту войну начали не россияне, а обезумевший диктатор. И наш гражданский долг — сделать всё, чтобы её остановить. Антивоенный комитет России |
Распространяйте правду о текущих событиях, оберегайте от пропаганды своих друзей и близких. Изменение общественного восприятия войны - ключ к её завершению. |
meduza.io, Популярная политика, Новая газета, zona.media, Майкл Наки. |
Текущая версия курса выглядит так:
Содержание
Вопросы с одного из прошлых экзаменов по C++
Список можно найти тут
--System29a 01:08, 25 апреля 2011 (UTC) Есть предложение настрочить ответы на хотя бы какую-то часть вопросов, мне кажется это было бы полезно.
Механика компилятора
- центральный процессор, команды процессора;
- данные, память и глобальные переменные;
- ОС и процесс;
- функции, стек, локальные переменные;
- куча, ссылки и указатели;
- CRT, куча, инициализация глобальных переменных;
- сборка проекта:
- предобработка, boost/preprocessor;
- компиляция, генерация кода функций, сбор имен, объектный файл;
- компоновка;
- заголовочные файлы и единицы трансляции;
- выравнивание;
- отладка программы.
Требования к программе
- программы пишутся для решения задач;
- программа с точки зрения пользователя;
- программа с точки зрения разработчика;
- отсюда требования:
- функциональность;
- устойчивость;
- минимизация затрат на решение задачи пользователя (удобство);
- скорость разработки;
- что дает С++:
- функциональность и удобство: множество библиотек и фреймворков;
- устойчивость: механизмы обработки нештатных ситуаций; тестирование (boost/test; google_test);
- скорость разработки.
Начало разработки программы
- выделение интерфейса программы;
- важность прототипирования;
- алгоритмы обработки интерфейса и структуры, в которых хранятся согласованные данные; состояние, инварианты;
- декомпозиция => масштабирование;
- состояние и интерфейс сущностей; граф связей между сущностями;
- важность инкапусляции;
- глобальные переменные, функции и классы как сущности с интерфейсом и состоянием;
Простой пример. Длинное число
- интерфейс, алгоритмы, состояние; код на С++;
- добавим оптимизацию по короткому числу;
- контейнер, интерфейс контейнера;
- как реализовать копирование, swap;
- pImpl;
Исключения
- механика процесса;
- бросание и обработка исключений;
- идеология разработки безопасного в смысле исключений кода (Саттер);
RAII
- умные указатели;
- взаимодействие с исключениями;
Статический и динамический полиморфизм
- наследование, область применения, явное выделение интерфейса;
- механика;
- шаблоны, область применения;
- механика;
- этюды на шаблонах, мини-введение в метапрограммирование;
Стандартные библиотеки
- stl;
- boost;
- qt;
Тестирование
- boost/test;
- google/test;
Сериализация
- пример;
- идея реализации;
- реализация;