Абсолютно. В эти дни три вещи, которые обычно есть в уроке 2, должны двигаться намного, намного позже:
- строки как массивы char *, методы strlen, strxxx и т. д.
- массивы в целом и арифметика указателей
- удалить то, что вы новый, удалить [] то, что вы новый [], и даже деструкторы
Эти вещи, которые обычно есть в уроке 99, должны двигаться намного, намного раньше
- шаблоны как вещи для использования (пишите, не так много)
- станд :: строка
- станд :: shared_ptr <>
- std :: vector <>, итераторы, другие коллекции
Необработанный указатель Evey должен быть немедленно передан оболочке интеллектуального указателя (я бы начал с shared, а позже рассмотрим уникальный, так как он требует объяснения ссылок std :: move и rvalue). Это сделает изучение C ++ очень похожим на изучение Java или C #, где вы изучаете библиотеку одновременно с языком. Это также отнимет уйму памяти и не будет беспокоить людей.
Я также включил бы лямбду в картинку, когда мы впервые захотели перебрать коллекцию и сделать что-нибудь для каждого элемента.
Отказ от ответственности: я пишу курс C ++ для Pluralsight прямо сейчас и использую этот подход. Последний модуль - это «понимание кода других людей», и именно здесь я добавлю такие запутанные вещи, как строки char *, ручное управление памятью, арифметика указателей и так далее.
Обновление: несколько человек спросили, почему существование C ++ 0x вдохновляет на обучение тем вещам, которые можно было бы преподавать на C ++ 03. Я думаю, что это ряд вещей:
- действительно умные указатели, которые удобны для коллекций, устраняют необходимость в таких вещах, как «массив указателей сотрудников», из-за которых мы всегда возвращались к новым / удаляемым, арифметике указателей и т. д.
- auto убирает боль от объявлений итераторов
- Лямбда заставляет проповедовать то, что делает обычный человек
- даже что-то столь же тривиальное, как синтаксический анализ,
>>
правильно устраняет ошибку, которая была бы при объявлении некоторых шаблонов шаблонов.
- и так далее
На мой взгляд, есть вещи, которые мы могли бы изменить в том, как мы преподавали C ++ некоторое время назад, но некоторые из нас сдерживались, потому что нам все еще нужен был способ старой школы для отступления или потому, что обучение этому просто требовало много тайных знаний.