С++ невозможно выучить, даже не пытайтесь.
Я уже 12 лет учу.
1. Начинал с книги "Borland C++ 5.02" для чайников (моя первая книжка по программированию).
Благодаря ней я написал два класса Foo и Bar. Там еще было описание GUI библиотеки OWL.
2. Много читал rsdn.ru (ныне полумертвый), borland.xportal.ru, впитывал.
Практически никогда сам не задавал вопросов, потому что умел пользоваться поиском, да и с английским проблем не было. Отвечал на вопросы других на разных форумах, помогая другим, набирал знания.
3. Начал изучать разработку GUI приложений в C++ Builder.
5. Прочитал множество книжек. Уже точно названий не помню, мне понравилась книжка, где давались практические советы и примеры правильного/неправильного использования C++, кажется "Эффективное использование С/C++".
6. Писал в школе на уроках информатики реализацию всяких линейных списков/деревьев/вычислений интегралов/производных/простых уравнений/минимумы функции, правда, на паскале (нас заставляли)
7. Научился работать с потоками (thread). Написал кучу небольших проектов для себя, в основном Winapi + WTL.
Пробовал писать на С++ "игры" на OpenGL/DirectX.
Писал программы для себя и для других на С++ Builder, Delphi, Visual C++, C#, Java.
8. Еще в школе начал писать open-source проект на C++ (сейчас там около 70 тыс. строчек, частично кроссплатформенный, познакомился с особенностями разных компиляторов).
https://github.com/zenden2k/image-uploader . Написал много других проектов поменьше.
9. Писал в универе лабы/курсовые/диплом на С++, C#, Java, Fortran, ASM, Bash, VHDL, Wolfram Mathematica, mssql.
У нас был курс С++ длящийся 2 семестра. Нас заставляли реализовывать самостоятельно стандартный контейнер (кажется std::vector). Еще писали какую-то базу данных на текстовых файлов с gui интерфейсом.
Изучил дискретку/теорию графов/матлогику/теорию компиляторов и формальных языков. Написал простой компилятор рекурсивного спуска на С++. Написал модель RTOS на C++. Написал какую-то непонятную систему массового обслуживания (СМО) сначала на паскале, потом на C++. Изучил межпоточную синронизацию на примере Winapi/Posix threads/java threads.
10. Изучил веб-программирование, PHP, Javascript, mysql/postgres. Написал кучу сайтов/веб-приложений.
Любимым сайтом стал stackoverflow.com
11. Прочитал книжку "Совершенный код." - та еще водичка.
Изучил книгу "Thinking in Java" и C# Дж. Рихтер. Хорошее знание других языков не помешает.
Открыл для себя Google C++ Style Guide. Начал частично следовать ему.
Но до сих пор я не могу сказать, что знаю C++ достаточно хорошо. Наверно, я просто тупой, никчемный программист.
Ошибки при компиляции шаблонов, и особенно ошибки линковки могут заставить меня зависнуть на некоторое время. Эти ошибки ну "очень информативные". Но благодаря опыту и интуиции я с ними справляюсь, а вот начинающему будет нелегко.