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