C++(3 семестр) — различия между версиями

Материал из Викиконспекты
Перейти к: навигация, поиск
(2 часть)
м (rollbackEdits.php mass rollback)
 
(не показаны 3 промежуточные версии 2 участников)
Строка 2: Строка 2:
 
==1 часть==
 
==1 часть==
 
===Наследование.===
 
===Наследование.===
[http://programmersclub.ru/26/]
 
  
 
===Виртуальные функции, абстрактные функции.===  
 
===Виртуальные функции, абстрактные функции.===  

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

Эта статья находится в разработке!

Содержание

1 часть

Наследование.

Виртуальные функции, абстрактные функции.

Таблица виртуальных функций.

Виртуальный деструктор.

Множественное наследование.

Модификаторы доступа для наследования.

Виртуальное наследование.

Порядок инициализации при создании объекта.

Pure virtual function call, __declspec(novtable).

Ковариантность типа возвращаемого значения.

Приведение типов: static_cast, dynamic_cast, const_cast, reinterpret_cast;

RunTime Type Information.

Templates: функции и классы.

Полная (explicit) и частичная (partial) специализация.

Compile-time объекты.

Разница между специализацией и перегрузкой функции.

Template arguments deduction, partial ordering для специализаций.

Правила инстанциирования.

Двухфазный lookup имен: по не зависящим от параметров (independent) и зависимым (dependent) именам.

Ключевое слово typename при обращении к dependent именам.

Отложенный парсинг шаблонных функций компилятором Microsoft (Сорокин обещал давать на экзамене задание на эту тему).

Два подхода к инстанциированию: Cfront – инстанциирование по ошибкам линковки (перелинковка, export template), Borland – инстанциирование везде, но с пометкой inline. Явное инстанциирование, подавление истанциирования.

SFINAE (substitution failure is not an error).

Overload resolution, conversion sequence.

Tag dispatching.

Namespace.

Global namespace.

Директива using namespace.

Порядок поиска в пространствах имен.

Using декларация.

Анонимный namespace.

Argument-dependent lookup (Koenig lookup).

STL. Контейнеры, итераторы, алгоритмы.

Контейнеры: sequence, associative.

Итераторы: input, output, forward, bidirectional, random access.

Reverse итераторы.

Range.

Концепторы, функторы.

2 часть

Дерево развития С++

RAII. Scoped_ptr, shared_ptr, make_shared<T>, unique_ptr, make_unique<T>, linked_ptr. Inode.

Реальный код, генерируемый компилятором. Return value optimizations. Move, rvalue ссылки. Perfect forwarding. Reference collapsing rule.

Анонимные функции (lambda).

Type erasure. Any, any_cast: с использованием dynamic_cast, с использованием static поля.

Механизм сигналов и слотов на примере Boost. Понятие reentrancy.

SSE оптимизации, strict aliasing rule, restrict.

Обработка ошибок, исключения в деструкторе.

Кодировки семейства Unicode. Графема, глиф. Code point, combining character. Code unit. UTF-8, overlong sequence. UTF-16, surrogate pair.

Системы сборки. Make, make-files. Особенности make. Генераторы make-файлов. Cmake.

Нововведения С++11: auto, decltype, anonymous functions, static_assert, range_based for, non-static members initialization, delegating constructors, inherited constructors, variatic templates, extern template, raw string literals, template aliases, constexpr.

Нововведения С++14: template anonymous functions, ослабление условий на constexpr, расширение STL, tuple.