С (прошедшим) днём рожденья, курс! 🎉🥳Вы знали, что 📅 4 сентября 2023 года фактически родился наш курс? Именно тогда я приступил к работе над ним, и именно тогда он был впервые опубликован.В 2023-2024 учебный год мы с Артёмом Николаевичем совместно вели для школьников занятия по C++. Это происходило в ЦДЮТТ Колпинского района г. Санкт-Петербург.📚 Презентации тогда были для детей учебниками, а тетради с решением задач находились на Stepik. Всё верно: наш курс на Stepik тогда был лишь задачником, в котором занимались ребята.Сначала мы начали добавлять "шпаргалки", чтобы дети могли подсматривать какую-то теорию прямо там, а потом это превратилось в полноценные обучающие материалы.Получается, наш курс сначала родился, ещё будучи зародышем, и лишь потом начал развиваться.А полноценным он стал, уже когда на нём было порядка тысячи учащихся.Такой вот цикл развития плода.
Основы программирования на С++
@cpp_basics
Канал курса «Основы программирования на C++» на платформе Stepik.Группа поддержки: @incredible_cppСоздатель курса: @souceguyСсылка на курс:https://stepik.org/course/182643
Похожие каналы
Все →Последние посты
🚀 Открыты предзаказы курса для продвинутых!Теперь вы можете увидеть в каталоге наш курс и купить его. Доступ к нему вы получите в момент открытия.Забавно, правда, что без предзаказов не было бы возможно тестирование курса.Как говорилось ранее, мы надеемся открыть курс где-то в середине сентября (ориентировочно, 15 числа). Время не на нашей стороне, поэтому открытие может быть отложено, но мы постараемся выпустить его в срок.⚠️ Учитывайте это, если будете делать предзаказ!После открытия курса вам будут доступны первые 3 учебных модуля:• «Целые числа»• «Управление памятью»• «Основы ООП»Остальные модули будут выходить по готовности. Мы будем активно дорабатывать курс а продолжать разрабатывать материалы.С выходом каждого модуля будет увеличиваться количество затраченных сил, так что, как и другие платные курсы, наш будет немного дорожать с течением времени.🔗 Ссылка на курс: *тык*. Здесь можно ознакомиться с описанием курса, его программой и оформить предзаказ.
Да кто этот ваш namespace std?Ещё в самом начале нашего пути в C++ мы изучили следующий шаблон для программ:#include <iostream> using namespace std;int main() { ... }С функцией main всё очень просто и ясно, инструкцию #include мы затронули уже в уроке 2.3, но кто такой namespace std и почему его используют (using)?Раньше программисты часто сталкивались с так называемыми «конфликтами имён».Я создал функцию printf в своей библиотеке, а потом Вася создал уже свою функцию printf в своей библиотеке.Вот я подключил мою и его библиотеки. Я вызвал функцию printf. В итоге чья функция была вызвана – его или моя?Программистам нужен был способ как-то гарантировать уникальность имён, чтобы компилятор не давал ошибки о конфликтах имён.Этим способом стали пространства имён (namespace). Это как папки для файлов, но только в коде: в них складываются функции и классы.Все стандартные функции и классы (например, cout и string) объявляются в пространстве имён std (standard).Из-за этого, чтобы получить к ним доступ, нужно использовать std::. Например:#include <iostream>#include <string>int main(){ std::cout << "Привет, мир!!" << std::endl << "Как вас зовут?" << std::endl; std::string name; std::cin >> name; std::cout << "Привет, " << name << "!";}Если мы не будем использовать std::, компилятор будет показывать ошибки «имя не найдено» (не существует просто cout, есть только std::cout).О, господи! Как же это громоздко! А можно как-нибудь избавиться от этого постоянно std::?Тут-то и приходит на помощь инструкция using namespace std; – она как бы говорит: «теперь мы используем всё из пространства std».Благодаря ней мы избегаем использования std::, но повышаем шанс получить конфликт имён.Поэтому это считается плохой практикой. Старайтесь как можно реже использовать using namespace в реальном коде.В общем, будьте здоровы, избегайте «using namespace std».#интересные_факты
Небольшие технические неопределённости...Вот наконец мы открыли тестирование, уже записалось несколько человек, но, к сожалению, вскрылась одна пока непонятная подробность.Платформа Stepik не даёт нам добавить больше 5 человек в команду тестирующих, хотя в справке об этом не было ничего написано. Мы направили запрос, чтобы узнать об этом подробнее, но пока не можем добавлять новых участников.Вы можете написать @souceguy, тогда я добавлю вас в очередь. Если ситуация разъяснится в хорошую сторону, в итоге вы попадёте в группу тестирующих.
Мы открываем набор тестировщиков! 🎉🐢 Да, медленно течёт не только время…Создание курса для продвинутых немного затягивается: на данный момент моя табличка в Excel показывает лишь 30% (от всего запланированного объёма).В данный момент мы разрабатываем 3-й учебный модуль. В сентябре, как было обещано, мы опубликуем первые 3 учебных модуля, а затем займёмся полировкой и созданием следующих учебных модулей (всего их запланировано 7).И да, курс называется «C++ для продвинутых», и он станет логическим продолжением существующего курса по основам.❓ Хотите поучаствовать в создании курса?Мы наконец открываем набор тестировщиков – тех людей, что готовы пройти курс, прокомментировать каждый его аспект и высказать свои мысли об увиденном.📌 Нам нужны:• Абсолютные новички, которые только что прошли курс «Основы программирования на C++» и хотят углубить свои знания• Продвинутые люди, которые уже знают что-то о программировании, о C++• Профессионалы своего дела, для которых этот и любые другие курсы будут лишь развлечениямиВ общем, нужны нам абсолютно все!📌 Что нам нужно от вас:• Проходить в своём темпе все уроки и задачи в черновом варианте• Давать подробные комментарии: что понятно, что – нет, где хочется больше примеров, а где хочется уже просто вырубить курс и заняться чем-то более интересным• Предлагать свои идеи (заданий или тем, изменений), критиковать контент и указывать на неточностиВ ближайшие 3 недели мы попросим вас дать фидбек по уже существующему контенту. Потом вы будете получать доступ к черновым вариантам будущих модулей ещё до их публикации.💎 На самом деле это неплохая возможность, ведь вы:• Окажете влияние на курс• Получите бесплатный доступ к нему• Ваши имена даже появятся в его “титрах”.🔥 Готовы к этому приключению? Пишите сюда: @souceguy.
А ещё, вы знали, что уже наступила вторая половина года?В каждом году 365 или 366 дней. 2025-й год вроде невисокосный, так что в нём вроде 365 дней.Если в нём 365 дней, значит вторая половина года наступает на 365 / 2 = 183-й день года.🗓 Значит середина года – это 2-е июля. Так? Ох, ещё бы знать, как с календарём работать...Значит наш канал родился прямо посередине предыдущего года! А ещё это значит, что мы все от этого года уже потеряли целую половину!Только вот что-то не так... Слишком много «если» и «вроде».Надо как-то проверить правильность подсчётов!А знаете что? Мы же все здесь с вами программисты! Да, к тому же, мы и C++ так хорошо знаем! Почему бы нам не написать программу, которая за нас всё подсчитает?🖥 Попробуйте написать программу, которая выводит дату (номер месяца и дня), в которую наступает середина года.$ gcc main.cpp -o program$ programКакой сейчас год? 2025Середина года наступит … числа … месяца.Пришлите потом код решения в комментариях. Посмотрим, заржавели ли мы за один месяц лета, или ещё умеем программировать!#особые_даты#задача
А вы знали, что год назад был создан этот канал?Точнее, год и 2 дня назад. Видимо это у нас такая особая фишка – опаздывать на дни рождения наших же курсов и каналов.🗓 2 июля 2024 года был создан этот канал. С тех пор мы опубликовали почти 80 постов с различными новостями о курсах и интересными фактами из языка C++ и не только.А подписчиков этого канала до сих пор меньше, чем участников группы для обсуждений...Получается, мы публиковали один пост примерно каждые 5 дней. М-да, негусто🙁.С другой стороны, мы сейчас взялись за голову, начали восстанавливать рабочий процесс. Авось и посты станут выходить на более регулярной основе)#особые_даты
Что же сейчас во внутренней кухне курса?На данный момент готовы (в какой-то степени) первые два обучающих модуля: «Больше о числах» и «Управление памятью» (программой мы делились в этом посте).📊 В численном выражении это почти 30% от всего обещанного материала.Я надеялся открыть доступ к первым 3-4 обучающим модулям курса уже в сентябре, так что скоро откроется набор в группу тестировщиков курса.ℹ️ Для это уже почти всё готово, нужно лишь подходящее время. Об открытии тестирования сюда будет опубликован пост, так что вы это не пропустите.Во время тестирования курс будет опубликован, но закрыт (не будет доступа к урокам). Просто небольшой технический прикол (без него нельзя открыть тестирование).Это значит, что вы сможете сделать что-то типа предзаказа. Для купивших курс доступ к урокам будет открыт в момент окончательной публикации курса.#опланах
И вот, вновь наступает лето. Это значит, сейчас самое время наконец делиться нашими планами.

Какие есть версии C++?В языках Python и Java, к примеру, можно явно выделить разные версии: 3.5, 3.8, 3.13 или 17, 20, 22. Эти языки регулярно обновляются. Но что насчёт C++? Как обновляется он?Язык C++ – это не просто какой-то компилятор и какие-то инструменты, это огромная точная спецификация. Согласно этой спецификации разработчики выпускают свои компиляторы.Развитием языка C++ занимается «Комитет стандартизации C++». Они периодически выпускают новые стандарты спецификации.Язык изначально появился в 1985, но первый стандарт вышел лишь в 1998. Называется он C++98.С тех пор вышло всего 6 новых стандартов: C++03, C++11, C++14, C++17, C++20 и C++23.Обо всех нововведениях во всех версиях можно прочитать на cppreference.com (например, здесь). На этом сайте очень внимательно относятся к спецификации, в том числе, подсвечивают разные изменения в нём.Но что значат все эти версии для меня как программиста?От них зависит то, какие фичи есть в языке, какое поведение стоит ожидать от них, и какие в них ещё остались баги.На платформе Stepik по умолчанию используется C++14. Конкретный выбор стандарта лежит на плечах разработчиков курсов, но выбор лишь среди C++11, C++14 и C++20.Если вы работаете в IDE на своём компьютере, то стандарт можно выбрать следующими образами:• В компиляторах GCC и Clang – добавив опцию -std=C++XX (вместо XX вставить версию стандарта)• В компиляторе MSVC – опцию /std:c++XX (тоже вставить версию стандарта)Если работать в Visual Studio, то можно просто кликнуть ПКМ по проекту, зайти в опции и там сразу высветится опция «C++ Language Standard».#интересные_факты
А какие операторы тогда в принципе бывают?В смысле, мы знаем какие-то конкретные операторы, знаем, какие они действия выполняют. Но как характеризовать эти операторы?Главное, как классифицируются операторы – по количеству операндов.Операнд – это значение (аргумент), которое мы передаём оператору. Например, в записи a + b переменные a и b являются операндами.Операторы выполняют операции над операндами.• Унарные – принимают на вход только один операнд. Например, i++, -number или !cond• Бинарные – принимают два операнда. Например, a + b, a = b или a && b• Тернарные – принимают по три операнда. В C++ есть только один такой: a ? b : cТернарный оператор очень похож на if-else. Мы его рассмотрим в курсе для продвинутых.ℹ️ Кстати, по такой логике получается, что 0 - number и -number – это две разных операции (с точки зрения языка), ведь в первом случае используется бинарный -, а во втором – унарный -.Ещё унарные (и бинарные тоже) делят на следующие виды:• Префиксные (пре – перед) – оператор пишется перед операндами. Н-р: ++i, -number, !condition• Постфиксные (пост – после) – оператор после операндов. Например, i++• Инфиксные (внутри, между) – оператор между двух операндов. Например, a * bВ C++ все бинарные операторы являются инфиксными, но вот в математике некоторые бинарные операции пишут в префиксной форме (Bxy).Кстати, теперь мы можем различить ещё одну пару операндов: i++ и ++i (то же и с декрементом). В C++ это два разных оператора, поскольку i++ постфиксный, а ++i – префиксный.🤔 Почему же эти вещи могут быть важны?В C++ в ООП есть концепция перегрузки операторов. С помощью ООП мы можем создавать собственные типы данных, а с помощью перегрузки операторов – менять поведение операторов для этих типов.Перегрузку операторов использует, к примеру, знаменитый cout:cout << "Hello world!" << endl;// Оператор << – это сдвиг битов числа влево// Поток cout использует этот оператор// по-другому: для вывода текстаПри перегрузке операторов для разных операторов нужно создавать разн

Какие есть операторы в C++?В предыдущем посте мы поговорили об операторе ++ в C++. Мы уже знаем о некоторых операторах в C++, но все ли из них нам известны?Самые знаменитые операторы в C++ – арифметические операторы. Среди них можно выделить 3 группы:• Аддитивные (add – добавить, увеличить) – это операторы a + b, a - b, а также +a и -a.• Мультипликативные (multiply – умножить) – это a * b, a / b и a % b• Побитовые – это операторы ~a, a & b, a ^ b, a | b, a << b и a >> bПобитовые операторы? Оказывается от нас скрывалась целая группа арифметических операторов, о которых мы не знали!ℹ️ Побитовые операторы работают не с самими числами, а с их отдельными битами.Например, ~a инвертирует все биты числа. Подробнее о побитовых операциях мы поговорим в одном из уроков курса для продвинутых.Кроме арифметических операторов в C++ есть ещё известные нам логические и сравнительные операторы.Ещё можно вспомнить инкремент и декремент: ++a и a--, а также операторы присваивания: a = b, a += b, a *= b и т.д.Любой арифметический оператор можно объединить с оператором = таким образом.Кроме них есть ещё всякие специфичные a[...] (элементы массива), *a, &a, a(...) (вызов функции), a, b (да, запятая – это оператор) и т.д.🤓 Более продвинутые пользователи языка знают о словесных операторах: static_cast, delete, new, sizeof и т.д. Некоторые из них мы тоже пройдём в курсе для продвинутых.Обо всех операторах можно узнать из таблички в этой статье.#интересные_факты

Кто этот ваш оператор ++ в C++?Ещё в самом начале нашего путешествия по миру C++ мы узнали, что существуют операторы ++ и --.• Оператор ++ – оператор инкремента, делает +1 к переменной• Оператор -- – оператор декремента, делает -1 к переменнойЭти два слова, инкремент и декремент, получились от английских increment (увеличение) и decrement (уменьшение).Оба этих оператора мы периодически используем в цикле for, ведь в нём наш счётчик должен совершать ровно один шаг (+1).А что если «C++» так называется, потому что он на 1 шаг впереди от языка C?🤔Возможно вы даже видели разные записи этого оператора:for (int i = 0; i < 5; ++i) { }for (int i = 0; i < 5; i++) { }Эти две разных записи называются префиксной (++i) и постфиксной (i++; иногда суффиксной). В чём же разница между ними?Давай разберём и запомним по-простому:• Префиксный инкремент ⬅️ (пре – перед) сначала увеличивает значение переменной, а потом его возвращает• Постфиксный инкремент ➡️ (пост – после) сначала возвращает значение, и лишь затем увеличивает егоЭто, конечно, чрезмерное упрощение, однако ведут они себя именно таким (или хотя бы похожим) образом.Посмотрим на префиксный инкремент:int number = 13;cout << "До изменения: " << number << endl;cout << "Значение при изменении: " << ++number << endl;cout << "После изменения: " << number << endl;📤 Вывод:До изменения: 13Значение при изменении: 14После изменения: 14Всё действие происходит между первой и третьей строчкой.Оператор ++number сначала увеличивает значение, а потом передаёт его в cout, чтобы оно вывелось – поэтому выводится 14.int number = 13;cout << "До изменения: " << number << endl;// Здесь уже постфиксный операторcout << "Значение при изменении: " << number++ << endl;cout << "После изменения: " << number << endl;📤 Вывод:До изменения: 13Значение при изменении: 13После изменения: 14Мы изменили в коде только оператор: поменяли с префиксного на постфиксный. В выводе изменилось только второе число.Получается, что постфиксный оператор тоже увеличив

Работа по курсу для продвинутых идёт полным ходом3-й модуль я уже завершил, а 4-й модуль завершён уже примерно на 75%. Всего я планировал в нём 7 уроков, из них 5 почти сделаны, 6-й запланирован на ближайшие недели, а 7-й урок я отложил на момент после создания модуля про ООП.Это всё значит, что курс готов уже на 25%!Возможно выпущу я его изначально неполным (без модулей с особо продвинутыми темами), так что его публикация скорее всего произойдёт где-то в конце (или середине) лета.Между тем, он получается очень объёмным. Из-за этого я сейчас веду урок со шпаргалками по всем темам, а также мне придётся добавить экзамены между основными модулями.Вы готовы к этому путешествию? Когда оно начнётся, путь будет не из простых.Кстати, раз уж я стремлюсь сделать курс качественным, в ближайшие недели я соберу группу тестировщиков, наверно где-то из 10 человек.Когда начнётся набор, вы увидите пост в этом канале. Вам может повезти получить преждевременный доступ к курсу.

Большинство из вас занимается на Stepik: проходит курсы и следит за тем, чтобы делать это регулярно. А я вот — нет.Казалось бы, я создаю курс, а значит, должен иметь солидный банк заданий. Чтобы его собрать, нужно проходить другие курсы, искать там задачи. Но нет, на занятия на Stepik у меня просто не хватает времени.К чему же это? На Stepik есть отличная механика "тепловых карт" (heatmap): она показывает количество решённых заданий по дням и визуализирует стрики. Человеческий мозг ну ооочень не любит прерывать стрики, что делает механику heatmap'ов отличной мотивацией для занятий.Теперь и я присоединяюсь к этой гонке за стриками! Следить за мной отныне можно по этой ссылке: *тык*.Вообще, такие инструменты — отличный способ отслеживать свои привычки и прогресс. Визуальное отслеживание вашей продуктивности всегда упрощает работу над какими-либо проектами.Этот конкретный можно легко интегрировать в Notion, Obsidian или даже на ваш персональный сайт. В результате можно вовсе создать единый хаб со всеми вашими задачами, привычками, знаниями и прочим.