Вы должны помнить два базовых принципа, которые действуют в рамках курса:
- пишите код осознанно, не забывая читать документацию языка и библиотек
- будьте готовы исправить код или применить методы рефакторинга
C/C++ полностью поддерживают императивный подход к программированию. Чтобы свободно им пользоваться, надо
- помнить про фундаментальные типы данных, включая void, целые числа (и особенности их дискретного представления), числа с плавающей точкой (и особенности их дискретного представления), тип char
- уметь пользоваться булевой алгеброй (реализованной в языке для типа bool), помнить о преобразованиях Де-Моргана, о Short-Curcuit Evaluation, о том, как int и float неявно преобразуются в bool
- помнить про неявный приоритет операторов, коммутативность и ассоциативность ряда операторов для примитивных типов
Необходимо:
- помнить про выражение с тернарным оператором
condition ? then_value : else_value
, которое в некоторых случаях может служить заменойif..else
- помнить про инструкцию switch, которая в некоторых случаях может служить заменой
if..else
- помнить про все три формы циклов:
while
,do..while
иfor
, уметь раскладывать одну инструкцию for на три инструкции (одна из которых — while), а также собирать инструкцию for из while - помнить про назначение инструкций continue и break в циклах, уметь изменять код, заменяя
break
на дополнительную булеву переменную или убирая булеву переменную в пользуbreak
.
C/C++ полностью поддерживают процедурную парадигму программирования. Чтобы свободно ей пользоваться, надо
- помнить, что вызов функции является выражением и потому может быть вложен в выражение:
setPosition(sin(a), cos(a))
- помнить, что порядок вычисления аргументов при вызове функции не определён стандартом и зависит от платформы
- помнить, что инструкция return является терминальной для функции и завершает выполнение как стуктурного блока кода, так и всей функции
- помнить про особенности функции main
- помнить про области видимости переменных
- иметь представление о классификации простых и составных типов данных в C/C++, в том числе уметь пользоваться ссылочными типами, указателями, массивами Си, структурами
struct
- уметь использовать как массивы языка Си, так и стандартный контейнер std::vector
- уметь выбирать между изменяемыми ссылками
T&
и константными ссылкамиconst T&
, ссылкамиT&, const T&
и указателямиT *, const T*
- знать о понятиях "нулевой указатель", о применении ключевых слов nullptr, new, delete
- иметь представление о трёх местах хранения переменных: статическая память, динамическая память, стек потока программы
Языки C/C++ способствуют разделению кода на интерфейс (заголовочные файлы) и реализацию (файлы *.c/*.cpp
). Также поддерживается деление программы на отдельные модули, где под модулем программы понимается отдельная пара "заголовочный файл" - "файл реализации". Следует:
- знать, в чём разница между определением (definition) и объявлением (declaration)
- помнить про One Definition Rule (cppreference.com)
- представлять, как ключевые слова
extern
иstatic
влияют на класс хранения и компоновку глобальных констант и переменных. Об этом рассказано в статье на en.cppreference.com - помнить общую схему препроцессинга, комплиляции и компоновки. Об этом рассказано в вопросе на stackoverflow.com
- помнить о том, что предкомпилированные заголовки ускоряют компиляцию
- уметь настраивать предкомпилированные заголовки (хотя бы для одной системы сборки / среды разработки)
Общая схема компиляции: