Курс C++ — различия между версиями
System29a (обсуждение | вклад) (→Вопросы с одного из прошлых экзаменов по C++) |
Rybak (обсуждение | вклад) (добавил ссылку на конспект Коробицына) |
||
Строка 2: | Строка 2: | ||
=== Вопросы с одного из прошлых экзаменов по C++ === | === Вопросы с одного из прошлых экзаменов по C++ === | ||
Список можно найти [[Старые вопросы на экзамен по C++|тут]] | Список можно найти [[Старые вопросы на экзамен по C++|тут]] | ||
+ | |||
+ | [http://ctd.ifmo.ru/~korobitsyn/kovalev.djvu Конспект в Djvu] | ||
--[[Участник:System29a|System29a]] 01:08, 25 апреля 2011 (UTC) Есть предложение настрочить ответы на хотя бы какую-то часть вопросов, мне кажется это было бы полезно. | --[[Участник:System29a|System29a]] 01:08, 25 апреля 2011 (UTC) Есть предложение настрочить ответы на хотя бы какую-то часть вопросов, мне кажется это было бы полезно. |
Версия 06:03, 19 мая 2011
Текущая версия курса выглядит так:
Содержание
Вопросы с одного из прошлых экзаменов по C++
Список можно найти тут
--System29a 01:08, 25 апреля 2011 (UTC) Есть предложение настрочить ответы на хотя бы какую-то часть вопросов, мне кажется это было бы полезно.
Механика компилятора
- центральный процессор, команды процессора;
- данные, память и глобальные переменные;
- ОС и процесс;
- функции, стек, локальные переменные;
- куча, ссылки и указатели;
- CRT, куча, инициализация глобальных переменных;
- сборка проекта:
- предобработка, boost/preprocessor;
- компиляция, генерация кода функций, сбор имен, объектный файл;
- компоновка;
- заголовочные файлы и единицы трансляции;
- выравнивание;
- отладка программы.
Требования к программе
- программы пишутся для решения задач;
- программа с точки зрения пользователя;
- программа с точки зрения разработчика;
- отсюда требования:
- функциональность;
- устойчивость;
- минимизация затрат на решение задачи пользователя (удобство);
- скорость разработки;
- что дает С++:
- функциональность и удобство: множество библиотек и фреймворков;
- устойчивость: механизмы обработки нештатных ситуаций; тестирование (boost/test; google_test);
- скорость разработки.
Начало разработки программы
- выделение интерфейса программы;
- важность прототипирования;
- алгоритмы обработки интерфейса и структуры, в которых хранятся согласованные данные; состояние, инварианты;
- декомпозиция => масштабирование;
- состояние и интерфейс сущностей; граф связей между сущностями;
- важность инкапусляции;
- глобальные переменные, функции и классы как сущности с интерфейсом и состоянием;
Простой пример. Длинное число
- интерфейс, алгоритмы, состояние; код на С++;
- добавим оптимизацию по короткому числу;
- контейнер, интерфейс контейнера;
- как реализовать копирование, swap;
- pImpl;
Исключения
- механика процесса;
- бросание и обработка исключений;
- идеология разработки безопасного в смысле исключений кода (Саттер);
RAII
- умные указатели;
- взаимодействие с исключениями;
Статический и динамический полиморфизм
- наследование, область применения, явное выделение интерфейса;
- механика;
- шаблоны, область применения;
- механика;
- этюды на шаблонах, мини-введение в метапрограммирование;
Стандартные библиотеки
- stl;
- boost;
- qt;
Тестирование
- boost/test;
- google/test;
Сериализация
- пример;
- идея реализации;
- реализация;