Помогите составить план по изучению языка C++. Установил Visual Studio, скачал несколько книг: С.Прата, С.Дэвис, С.Липпман, Г.Шилдт, во всех книгах план примерно такой:
1. Основы синтаксиса, лексемы, типы данных
2. Условия, циклы
3. Сложные типы данных: структуры, массивы, строки
4. Указатели
5. Функциональное программирование
6. Классы и объекты
7. Работа с классами и объектами: наследование, конструкторы
8. Библиотеки iostream и string
Сейчас несколько месяцев уже изучение не продвигается, застрял на объектах, несколько раз пытался перепрыгивать через темы, чтобы поскорее начать программировать и понимал, что так нельзя делать, нужно изучать всё последовательно. Казалось бы что тут непонятного, вот есть объекты, есть их методы, но при этом в C++ "всё есть объект", вот например строковый тип string является вовсе не типом, а классом, или ввод/вывод в консольном приложении осуществляется через объекты cin и cout.
Хотел бы изучить C++ до уровня, чтобы я мог свободно работать с внешними библиотеками, будь то rapidjson для парсинга JSON либо сложные фреймворки, типа Qt или Boost.
Вобщем жду любых советов, может кто задачек практических, например, подкинет.
https://roadmap.sh/cpp
Сделайте какой-нибудь пет-проект, заточенный не сколько для собственного применения, а для другого человека. Пусть даже функционал будет минимальный. Тогда появится желание сделать качественный функционал и правильный вывод ошибок. Тогда все проблемные области дорожной карты подтянутся само собой, просто потому, что в этом возникнет острая необходимость.
Нет. В С++ нет встроенных типов для привычных в других языках примитивов типа строк и контейнеров, вместо них предлагаются объекты библиотеки STL. Или другой библиотеки, которую вы предпочитаете.
Оптимальность и гибкость.
Классы - это и есть типы. Только это не встроенные типы, а типы определяемые пользователем. В случае с std::string - это тип определяемый стандартной библиотекой, но это не принципиально.
Кроме классов есть еще структуры, это по сути одно и то же, кроме небольших различий.
ввод/вывод в консольном приложении осуществляется через объекты cin и cout
И что? У вас с этим проблемы? Можете использовать и std::printf, но это не "С++ style" :)
Как тут уже все не однократно писали - больше практики. Делайте задания из книг, придумайте свой проект и пытайтесь его реализовать.
И что? У вас с этим проблемы? Можете использовать и std::printf, но это не "С++ style" :)
Ну да, я читал, что нужно стараться соответствовать стандартам C++ 11 и выше, в частности использовать std::cout вместо std::printf(), так компилятор создаст более оптимальный код. Просто возникают вопросы как сделать так или этак. В принципе я наверное могу вопросы прямо здесь начать задавать.
1. Для вывода есть 2 объекта: std::cout и std::wcout, причём второй предназначен специально для вывода в кодировке UTF-8. Однако у меня в обоих случаях вместо русских букв выводятся крякозябры. Код пишу в Visual Studio Community 2019.
2. Ввод осуществляется с помощью std::cin, который в качестве аргумента может принимать и число, и указатель на начало строки и объект std:string. При этом если укаан тип число, но пользователь введёт буквы, то возникнет ошибка, которую можно будет выловить при помощи cin.fail(). Как написать функцию, которая будет запрашивать ввод переменной, и если тип не число, то после ввода должен следовать возврат из функции, а если число, то проверка на cin.fail() и в случае ошибки - вывод сообщения и повторный ввод?
Т.е. вы просто читаете, но код не пишете? Если это так - то это и есть проблема. Садитесь и программируйте. Что угодно. Текстовый квест пишите, парсер хабра, и т.д.
Почему не пишу, пишу, идей только нет, может тут подкинут. Школьные задачки, типа вычисления факториала, это для меня - пройденный этап, хотелось бы что-нибудь на использование объектов
Так у меня идеи для проектов - это переписывание своих программ на PHP и bash на C++. Например успешно справился с программой, которая читает из файла список диапазонов номеров телефонов и переписывает его в виде шаблонов для asterisk. А вот с программой, которая взаимодействует с API Яндекс-погоды не справился, не понял как работать с библиотекой rapidjson.