Курс C++ — различия между версиями

Материал из Викиконспекты
Перейти к: навигация, поиск
м (rollbackEdits.php mass rollback)
 
(не показаны 3 промежуточные версии 3 участников)
Строка 2: Строка 2:
 
=== Вопросы с одного из прошлых экзаменов по C++ ===
 
=== Вопросы с одного из прошлых экзаменов по C++ ===
 
Список можно найти [[Старые вопросы на экзамен по C++|тут]]
 
Список можно найти [[Старые вопросы на экзамен по C++|тут]]
 +
 +
[http://ctd.ifmo.ru/~korobitsyn/kovalev.djvu Конспект в Djvu]
 +
 +
--[[Участник:System29a|System29a]] 01:08, 25 апреля 2011 (UTC) Есть предложение настрочить ответы на хотя бы какую-то часть вопросов, мне кажется это было бы полезно.
 +
 
=== Механика компилятора ===
 
=== Механика компилятора ===
 
* центральный процессор, команды процессора;
 
* центральный процессор, команды процессора;

Текущая версия на 19:41, 4 сентября 2022

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

Вопросы с одного из прошлых экзаменов по 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;

Сериализация

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