[БЕЗ_ЗВУКА] Здравствуйте. Меня зовут Илья Шишков, и в этом уроке мы с вами поговорим о пространствах имен в языке C++. И давайте начнем с знакомства с учебным примером, на котором мы будем разбирать, что такое пространства имен, и как ими, собственно, пользоваться. Давайте представим, что мы с вами пишем программу управления личными финансами. И мы хотим собирать в одном месте все наши расходы и как-то потом их обрабатывать. И у нас уже есть какой-то код, с которого мы начинаем работу. У нас есть структура Spending — собственно, трата, которая состоит из двух полей. Это категория — собственно, что это за трата: продукты, транспорт, одежда или что-то еще, и amount — количество, сколько денег мы на эту категорию потратили. И вот эти вот самые траты мы как-то в нашей программе умеем обрабатывать. Например, у нас есть функция CalculateTotalSpendings, которая по вектору расходов, по вектору трат считает, собственно, сколько всего денег мы потратили. Ну, она делает это предельно просто: она просто проходит по вектору и находит сумму полей amount. И возвращает, сколько в сумме денег мы потратили. Также у нас есть другая функция обработки расходов, это функция MostExpensiveCategory. Она находит самую дорогую категорию расходов в наших тратах. Ну, собственно, тоже устроена достаточно просто, она использует стандартный алгоритм max_element и проходит по вектору расходов и находит ту категорию, у которой расход, собственно, вот это поле amount, максимальный. И у нас есть функция main, в которой представлен пример использования структуры Spending и функций. Мы создали какой-то вектор, заполнили его, вот у нас сказано, что на продукты мы потратили 2500, ну, допустим, рублей, на транспорт — 1150, ну и т.д. На путешествия, например — 23740, на спорт — 12000. И мы этот вектор передаем в функцию CalculateTotal Spendings и MostExpensiveCategory. Давайте, как обычно, скомпилируем нашу программу, убедимся, что наш стартовый код компилируется, запустим и видим, что суммарно мы потратили 52670 рублей, и самой дорогой категорией расходов оказались путешествия. Ну и если мы посмотрим в наш вектор, то убедимся, что да, наша функция правильно работает, действительно на путешествия мы потратили денег больше всего. Но сейчас мы можем добавлять расходы, только указывая их вот в этом векторе в функции main и перекомпилируя программу. Естественно, если мы разрабатываем программу для массового потребителя, это будет неудобно. И мы решили, что, чтобы наша программа была удобна пользователям, мы хотим добавить в нее возможность загрузки расходов из формата XML и из формата JSON. Естественно, мы не хотим самостоятельно писать свой XML парсер, потому что их уже много написано. Поэтому мы хотим воспользоваться готовой библиотекой. Ну и то же самое для JSON, мы тоже хотим взять готовый код и просто им воспользоваться. И у меня в проекте уже есть библиотеки для работы с форматами XML и JSON. Вот вы можете видеть, здесь в инспекторе проектов есть файлы json.h и .cpp и xml.h и .cpp. Это, собственно, библиотеки для работы с этими форматами. При этом я хочу отметить, что это не реальные библиотеки, а мы их сами написали для нашего учебного примера, чтобы они были попроще, и с ними было проще работать. Итак, вот я открыл файл xml.h и просто, чтобы вы видели, что здесь есть класс Node, класс Document, функция Load, которая умеет загружать из входного потока, собственно, XML документ. И что мы хотим сделать? Мы хотим воспользоваться этими библиотеками и научиться загружать расходы с их помощью. При этом давайте еще посмотрим, у меня есть пример расходов в формате XML. Вот так вот он выглядит, это, собственно, XML документ, и здесь те же самые расходы, которые у меня в функции main, но описанные в формате XML. Собственно, что мы хотим сделать в коде? Мы хотим написать функцию, которая возвращает вектор структур Spending, она называется LoadFromXml, принимает на вход поток ввода. И еще одну мы хотим, еще одну функцию мы хотим написать для формата JSON с точно таким же интерфейсом. При этом мы хотим воспользоваться нашими готовыми библиотеками, чтобы, собственно, не писать парсеры самим. Для того, чтобы вы как следует познакомились с кодом наших готовых библиотек, написание вот этих вот функций — LoadFromXml и LoadFromJson — мы вынесли в тренировочные задачи, чтобы вы сами эти функции написали, сами познакомились с кодом библиотек, потому что так вам будет проще дальше понимать, как мы будем применять и изучать пространства имен. Поэтому перед переходом к следующим видео, пожалуйста, решите две тренировочные задачи по внедрению форматов XML и JSON в наш учебный пример.