Курс C++

Материал из Викиконспекты
Перейти к: навигация, поиск

Текущая версия курса выглядит так:

Вопросы с одного из прошлых экзаменов по C++[править]

Список можно найти тут

Конспект в Djvu

--System29a 01:08, 25 апреля 2011 (UTC) Есть предложение настрочить ответы на хотя бы какую-то часть вопросов, мне кажется это было бы полезно.

Механика компилятора[править]

  • центральный процессор, команды процессора;
  • данные, память и глобальные переменные;
  • ОС и процесс;
  • функции, стек, локальные переменные;
  • куча, ссылки и указатели;
  • CRT, куча, инициализация глобальных переменных;
  • сборка проекта:
    • предобработка, boost/preprocessor;
    • компиляция, генерация кода функций, сбор имен, объектный файл;
    • компоновка;
    • заголовочные файлы и единицы трансляции;
    • выравнивание;
  • отладка программы.

Требования к программе[править]

  • программы пишутся для решения задач;
  • программа с точки зрения пользователя;
  • программа с точки зрения разработчика;
  • отсюда требования:
    • функциональность;
    • устойчивость;
    • минимизация затрат на решение задачи пользователя (удобство);
    • скорость разработки;
  • что дает С++:
    • функциональность и удобство: множество библиотек и фреймворков;
    • устойчивость: механизмы обработки нештатных ситуаций; тестирование (boost/test; google_test);
    • скорость разработки.

Начало разработки программы[править]

  • выделение интерфейса программы;
  • важность прототипирования;
  • алгоритмы обработки интерфейса и структуры, в которых хранятся согласованные данные; состояние, инварианты;
  • декомпозиция => масштабирование;
  • состояние и интерфейс сущностей; граф связей между сущностями;
  • важность инкапусляции;
  • глобальные переменные, функции и классы как сущности с интерфейсом и состоянием;

Простой пример. Длинное число[править]

  • интерфейс, алгоритмы, состояние; код на С++;
  • добавим оптимизацию по короткому числу;
  • контейнер, интерфейс контейнера;
  • как реализовать копирование, swap;
  • pImpl;

Исключения[править]

  • механика процесса;
  • бросание и обработка исключений;
  • идеология разработки безопасного в смысле исключений кода (Саттер);

RAII[править]

  • умные указатели;
  • взаимодействие с исключениями;

Статический и динамический полиморфизм[править]

  • наследование, область применения, явное выделение интерфейса;
  • механика;
  • шаблоны, область применения;
  • механика;
  • этюды на шаблонах, мини-введение в метапрограммирование;

Стандартные библиотеки[править]

  • stl;
  • boost;
  • qt;

Тестирование[править]

  • boost/test;
  • google/test;

Сериализация[править]

  • пример;
  • идея реализации;
  • реализация;