Вот такие видео я был бы рад смотреть каждый день, пойду чинить свой код и пришлю тебе, будешь на себе волосы рвать от увиденного :D
@sarlevdiz7 жыл бұрын
Больше таких видео!!!!! Очень круто
@АртёмЮгай-ц2п3 жыл бұрын
Этикет спасибо спасибо больше
@igorbond28236 жыл бұрын
А как можно кашу наваять в 2017 году? или редакторы C++ до сих пор не умеют код форматировать?
@АлександрНиконов-и4ы2 жыл бұрын
Это прям очень спорно. Если ф-ция должна изменять вектор - передайте указатель, если нет - по значению с const для наглядности.
@moskalenko2k247 жыл бұрын
Прикольные видео и вставки из советских фильмов хорошие) Очень хотелось бы хорошего видео по мув семантике))
@DariaEmacs7 жыл бұрын
Спасибо, Андрей). Я подумаю о таком видео).
@roysigayerd92687 жыл бұрын
Дария Емакс , спасибо хороший контент ..Ты великолепна. Очень полезно все ..Но можно замечание ..Ты сама по себе самодостаточна, а твой контент несет интелектулаьный посыл..Но только пытаешься сосредоточиться, вставляются эти вставки из фильмов.. Сделай их раз, в 10 меньше ..Очень их много ..Напрягает..Имхо
@damianw.voronov13687 жыл бұрын
Да Дарья... мне youtube всё подсовывал, подсовывал ваше видео, а я всё игнорил, игнорил...каков глупец!!! ;( Вы прелесть, и объяснения и подача, и позитивный настрой. Мало конечно чего понятно, ибо "начал с конца" просмотр ваших видео, и сам новичок. Но! Лиха беда начало! :)
@gitarnoob7 жыл бұрын
А вы почитайте Стандарты программирования на C++ 101 правило и рекомендация Александреску, Саттер. Там всё на более высоком уровне рассказано, - с точки зрения Объектно Ориентированного Программирования вообще, откуда также следуют правила хорошего тона на C++ (const'ы, ссылки, семантика и модификаторы "встроенных" методов и т.п.) Книга философская, сложная в осмыслении, но много советов - кэповские. В книге нет C++11, правда есть СТЛные аналоги. Для тех кто не знает, std::move преобразует к rvalue-ссылке, т.е. && (два аперсанда), т.е. по-просту заставляет вызваться семантику перемещения у candies, потому что в конструктор candies передаётся rvalue-ссылка. Семантика перемещения это конструктор перемещения и оператор копирования перемещения, внутри которых следует писать обмен указателями. Входной аргумент в отличие от копирующей семантики уже не может быть const.
@DariaEmacs7 жыл бұрын
Читала, но давно, по-моему, все советы из нее повторяются в книгах С. Мейерса. Кстати, есть много хороших книг о стиле и о том, почему так, а не иначе: Б. Керниган, Р. Пайк "Практика программирования", Б. Страуструп "Дизайн и эволюция С++".
@gitarnoob7 жыл бұрын
Это я для зрителей вредный совет дал, так как для новичков книга тяжелая. У Майерса "Эффективное использование C++" советы простые, в отличие от вышеописанной книги.
@thomasmorgan90437 жыл бұрын
Круто! Всегда использовал указатели в своей практике. А что это за IDE?
@DariaEmacs7 жыл бұрын
Спасибо). Это не IDE, это Emacs)
@АртурГалимов-в1б7 жыл бұрын
Есть видос как ее рефакторят?
@ПтицаМеланхоличная4 жыл бұрын
Про конструктор копирования непонятно, пересматривал 5 раз(
@ZerpicoBlog7 жыл бұрын
Я не так давно начал изучать С++ по книге Р.Лафоре после C#. Ты говорила что необходимо делать конструктор копирования на 6:31 А разве обязательно его описывать? Можно вызвать копирующий конструктор по умолчанию (по крайне мере если верить книге). Так вот: Room room2(room1);
@DariaEmacs7 жыл бұрын
Нет, конечно, не обязательно его определять, пусть будет по умолчанию. Это нужно только, если у Вас в конструкторе выделяется память с помощью new или создаются какие-то ресурсы с доступом по указателю, тогда при копировании нужно это предусмотреть и выделить свою память и ресурсы для копии, а то скопируется только указатель.
@Acid313377 жыл бұрын
За все время программирования на c++, я стал лучше писать код на c++, а вот программировать лучше не стал. У крестовиков это болезнь такая - они все время тратят на возню с языком и компилятором. Советую новичкам не изучать C++ вообще, если уже писали на си.
@DariaEmacs7 жыл бұрын
Если такая ситуация у Вас, почему вы думаете, что это происходит со всеми))?
@gitarnoob7 жыл бұрын
верно, для того чтобы серьезные задачи делать, используя при этом C++, надо много опыта иметь, свои "фишки" применять, досконально знать подводные камни и грабли.
@АндрейСавин-ч9т6 жыл бұрын
я считаю что с++ очень функциональный язык и новичкам он подойдёт)
@yurim77566 жыл бұрын
Daria Emacs Он же написал. Потому что время тратят на войну с компилятором и языком. Я бы еще уточнил. Потому что вам надо несколько лет потратить на изучение технической части, заучить все подводные камни, а это куча толстых книжек. Когда как на других языках, такая же куча толстых книжек уже будет не про компилятор, а про повышение мастерства. У людей на других языках есть заметная фора и если они учатся, то через лет 5-8 они могут стать прекрасными программистами, писать быстро хороший код со всех точек зрения. А с++ки за это время научатся только на грабли не наступать.
@avazart6144 жыл бұрын
Так а чем Си отличается? Ровно та же болезнь то же компилятор и отладчик ...
@sashasashovic914 жыл бұрын
GetSize(); что за стиль?
@DariaEmacs4 жыл бұрын
CamelCase
@oaknottree4 жыл бұрын
@@DariaEmacs так PascalCase же?
@mikhailgorshenin90767 жыл бұрын
Дарья, здравствуйте. 7:01 - можно ли заставить компилятор оптимизировать код так, чтобы инициализация проводилась сразу необходимыми данными?
@DariaEmacs7 жыл бұрын
Михаил, может быть, я не совсем правильно поняла Ваш вопрос, а как Вы ему подскажите, какие данные Вы считаете необходимыми?
@mikhailgorshenin90767 жыл бұрын
Необходимые = в данном примере это ссылка на объект Room. Я понимаю, что правильнее будет использовать конструктор копирования при инициализации объекта, но все-таки хочется понять, может ли компилятор оптимизировать присвоение в теле конструктора в инициализацию с помощью конструктора копирования (или во что-то другое, что будет еще более правильно.)
@DariaEmacs7 жыл бұрын
Компилятор может оптимизировать временные переменные, не до фанатизма, конечно, перемножить числа, убрать недостижимые куски кода, вот тут можно подробнее почитать об различных оптимизациях: habrahabr.ru/post/124131/ Совсем недавно компиляторы не были такими умными, как сейчас и, возможно, в будущем, компилятор сможет оптимизировать почти все).
@kjes86397 жыл бұрын
Подскажите, пожалуйста, какой IDE вы использовали, который показывал вам что происходит в компиляторе? Очень полезно каждому джуну будет, это позволит лучше понять как работает код, который он пишет)
@DariaEmacs7 жыл бұрын
Константин, это emacs). А компилятор показывает, что внутри происходит, потому что я вставила печать в функции. Есть такой макрос __PRETTY_FUNCTION__ с помощью него можно распечатать имя функции, в которой он находится: class Chocolate{ public: Chocolate(){ std::cout
@DariaEmacs7 жыл бұрын
редактор съел по одному подчеркиванию в названии макроса с каждой стороны :)
@kjes86397 жыл бұрын
Спасибо)
@yurim77566 жыл бұрын
Мало работал на С++, да и учил его еще в 90-х. Но удивляет удивление про то, как написан код. Насколько помню, везде с самого начала в книгах так и учат код писать, разделять приватную часть, публичную, разбивать на файлы с объявлением и реализацией и т.д. Я на самом деле позже узнал, что можно так и не делать. Про толстых собак - вы, женщины, инопланетянки. Мужчине никогда такая аналогия в голову не придет. Было еще в моей жизни. Девушка попросила объяснить, что такое рекурсия. Я ей показал на примере. Она: - Это как чужой! Из головы вылазит другая, из нее третья.
@clanwarexperiment23975 жыл бұрын
Добрый день. Хотелось бы узнать о том, могут ли члены класса быть public (понятное дело что могут, вопрос в том является ли это хорошим стилем программирования) или обязательно нужно создавать функцию-член, а сам член делать private. Допустим, что есть переменная radius и нам нужно это значение вне класса, можно ли оставить radius public или обязательно нужно создать функцию-член readRadius, а сам radius сделать private?
@DariaEmacs5 жыл бұрын
Добрый день. Вообще, да, положено делать члены класса приватными, а доступ давать через функции. Если Вы пишите библиотеку для своих коллег или других людей, то это особенно важно! Ваши пользователи могут разрушить весь объект, если им дать доступ ко внутренним переменным.
@Tmality7 жыл бұрын
список инициализации имеет смысл, только если в нем, вызывается самописный класс. В данном примере coordX и coordY имеют тип double, который относится POD данным, в которых нет конструктора. Соответсвенно не имеет смысла писать их в списке инициализации.
@DariaEmacs7 жыл бұрын
Со встроенными типами, это дело вкуса/привычки и удобства. У нас в фирме было принято использовать список инициализации. В другой компании могут быть другие coding standard для встроенных типов.
@bumbarabun4 жыл бұрын
"Соответсвенно не имеет смысла писать их в списке инициализации." это не так. Смысл есть всегда - список инициализации будет всегда работать не хуже, а иногда лучше. Поэтому лучше иметь навык всегда использовать список инициализации, а не задумываться, а тут у меня свой класс или double? А вдруг кто-то завтра перейдет с double на свой?
@ms_shifu70477 жыл бұрын
А почему вы не используете using namespace std; что бы не писать постоянно std::...?
@DariaEmacs7 жыл бұрын
using обычно запрещают использовать в проектах (иногда дают послабление на полную формулировку, к примеру, using std::cout), поэтому я привыкла всегда писать полностью и не хочу расслабляться в своих мелких программках).
@АлександрАлександр-и6с6 жыл бұрын
А какое IDE вы тут использовали?
@DariaEmacs6 жыл бұрын
emacs
@geraltt14554 жыл бұрын
классно
@ВладиславГришин-ш7ш5 жыл бұрын
объявления сверху, реализации снизу. зачем два файла делать?
@ВладиславГришин-ш7ш5 жыл бұрын
скиньте ссылку на кодинг стандарт
@MykhailoYasko4 жыл бұрын
Тема венгерской записи не раскрыта.
@Hemyl05007 жыл бұрын
У меня возник вопрос: в Room& operator=(const Room& r); на 7:01 почему нет никакого присвоения? Грубо говоря метод получил аргумент и ничего с ним не делает, затем делает вывод и возвращает ссылку на сам объект, которому мы так и ничего не присвоили. Или я где-то в чем-то не прав?
@DariaEmacs7 жыл бұрын
Да, Вы правы, но в этом классе нет переменных, он нужен был только для того, чтобы показать, какие функции вызываются. А так да, нужно сначала проверить на самоприсваивание, а потом присвоить всем внутренним переменным новое значение: Room& operator=(const Room& r){ if (this == &r) { return *this; } cost = r.cost; // и здесь прописываем все переменные, которые надо изменить return *this; }
@Hemyl05007 жыл бұрын
Спасибо за ответ (:
@sarlevdiz7 жыл бұрын
О, правда круто. А можешь выложить свой код на github?
@DariaEmacs7 жыл бұрын
)) мой кот не полезет на гитхаб).
@sarlevdiz7 жыл бұрын
А дай ссылку просто на свой репозиторий
@DariaEmacs7 жыл бұрын
у меня там нет ничего) : github.com/dariaemacs
@sarlevdiz7 жыл бұрын
спасибо огромное!
@sarlevdiz7 жыл бұрын
ай, он совсем пустой. А можешь порекомендовать примеры с хорошим стилем на github? Очень нужно
@hash81216 жыл бұрын
Сложнаа, я на Python работаю)
@антонващенко-й7я7 жыл бұрын
Третье видео смотрю ты жгешь!!
@ArtemMELNYK6 жыл бұрын
Очень полезное видео. Интересно было бы посмотреть на реальный документ "Кодинг стандарт". Еще интересный, но не рассмотренный вопрос о выравнивании кода (Indentation style) в контексте этого самого "Кодинг стандарта".
@dzanis797 жыл бұрын
Какая красивая (подсветка синтаксиса) Ну setCoordX тоже не привычно ,везде встречается setPosX
@DariaEmacs7 жыл бұрын
Да, мне тоже нравится). А имена разные бывают), по мне, главное, чтобы не foo(). :)
@ArtemMELNYK6 жыл бұрын
На мой взгляд, нужно было бы обозначить существующее соглашение о написании имен переменных, назвать существующие, как они назывется в литературе или википедии - Camel case и Snake case. Я как новичек, запомнил название "птички на жердочках" и чуть было не использовал его. ПС en.wikipedia.org/wiki/Snake_case en.wikipedia.org/wiki/Camel_case
@dat_217 жыл бұрын
Сомнительное применение move. Такие вещи нужно делать отдельным методом, или еще лучше - использовать свои перегрузки для rvalue ссылок. В таком случае программист, использующий этот класс, будет знать, что теряет передаваемый параметр.
@DariaEmacs7 жыл бұрын
Человек пишет для себя SOM, при разработке интерфейса совсем другой подход).
@dat_217 жыл бұрын
В таком случае копирование с передачей по ссылке будет предпочтительней
@DariaEmacs7 жыл бұрын
А можно аргументировано? :)
@gitarnoob7 жыл бұрын
"... Такие вещи нужно делать отдельным методом, или еще лучше - использовать свои перегрузки для rvalue ссылок. В таком случае программист, использующий этот класс, будет знать, что теряет передаваемый параметр." - 100% аргумент. Писать так низя, так как за пределами реализации класса Present неясно, можно ли в дальнейшем использовать аргумент переданный в конструктор Present или нет. Когда человек напишет такой (не совсем ровный код) а потом вернется к нему через месяц хотя бы - будет в недоумении.
@DariaEmacs7 жыл бұрын
Еще раз, если этот код не для библиотеки, не для команды, не для подставьте_что_Вам_больше_нравится, а просто для себя и пользоваться кодом буду только я. Я думаю, что имею право использовать в своем проекте такой метод, потому что знаю, что _мне_ вектор больше не нужен. Я же не утверждала, что так нужно делать всегда, а просто показала, как еще можно его передать.
@bumbarabun4 жыл бұрын
8:09 боюсь, Дарья, вы отстали от жизни. Передача вектора по значению может быть эффективнее передачи по ссылке.
@DariaEmacs4 жыл бұрын
А, Вы не смотрите старые видео).
@bumbarabun4 жыл бұрын
@@DariaEmacs ютуб подсовывает, не виноватая я. Да и зрители должны знать, что это неправильно, откуда они знают что Вы за три года поменяли свое мнение? move semantics ввели же не после 2017.
@evgenykhabarov54277 жыл бұрын
Касательно оператора присвоения, компиляторы уже давно научились присваивать тип к типу, и не требуют данного оператора, конечно да это знак приличия, если конечно ты не чего не изменяешь при присваивание, ну к примеру одну переменную увеличит на 10, в таком случае человек который будет пользоваться библиотекой будет в недоумении почему при присваивание одна переменная увеличилась на 10 и тд.
@DariaEmacs7 жыл бұрын
Да), но вообще говоря, компилятор все эти функции сам создает, если их не написал программист) и конструктор, и деструктор, и конструктор копирования, и оператор присваивания).
@dbushenko7 жыл бұрын
Ограничение 80 символов связано с тем, что раньше на старых текстовых терминалах можно было показать только 25 строк по 80 символов. Теперь это ограничение уже неактуально, особенно учитывая теперешние размеры мониторов :-)
@k.osiyuk7 жыл бұрын
А если я хочу напечатать код на бумаге?
@АртёмЮгай-ц2п3 жыл бұрын
Большое
@fastline41946 жыл бұрын
огонь, побольше бы таких людей в проекте
@sarlevdiz7 жыл бұрын
А еще, лучше сейчас записать новые видео, пока не наступили прездники, а то потом жди новых выпусков
@ИльяБелоногов-х6э5 жыл бұрын
Названия переменных по типу птички на проводах - это дичь
@avazart6144 жыл бұрын
С++Qt как раз курит кемел. Главное что бы не паскалькейс.
@AndriiKuftachov6 жыл бұрын
Ужас, как в Си++ все запущенно!!!
@satirik10514 жыл бұрын
Блин, я не программист, но на девушку засмотрелся. Очаровательна.
@romankuksin99187 жыл бұрын
Ваше "исправление" породило неожиданную move семантику. Юзер вашего класса не догадается, что ваш конструктор обнуляет вектор, пока не залезет руками в реализацию. Я не видел ни одного CC, в котором передача объекта во владение проводилась бы таким образом, и это логично, т.к. то, что вы показали - классический выстрел себе в ногу. Передавать вектор в конструктор нужно не по ссылке, а по значению, как было изначально. А std::move делать в двух местах: в списке инициализации и в теле вызывающей функции. Тогда тому, кто читает код будет очевидно, что вектор переиспользовать нельзя.
@DariaEmacs7 жыл бұрын
Это не исправление, а попутное замечание. Этим классом никто пользоваться не будет. Это учебный проект для личного использования. Именно в этом месте вектор уже не нужен. Человек реализует som из предыдущего ролика.
@romankuksin99187 жыл бұрын
Хорошо, пусть будет попутное замечание, содержащее плохой способ применения move семантики. То, что код не будет повторно использован, не отменяет его недостатков.
@DariaEmacs7 жыл бұрын
Это не было обращением ко всем делать так, это было исследованием, что происходит внутри, сколько чего внутри вызывается, если менять виды передачи), не нервничайте так. А недостатки есть у всех, и никто не исключение.
@romankuksin99187 жыл бұрын
Что значит недостатки есть у всех? Передачу вектора во владение класса можно и без недостатков написать. Или все-таки нельзя? Причем тут мои нервы? Зачем вообще переходить на личности?
@DariaEmacs7 жыл бұрын
Ну, вот, хотела Вас успокоить, а Вы еще больше разнервничались).
@buzzword1237 жыл бұрын
С# и java отстои, С++ рулз. Правильный выбор.
@shiny39376 жыл бұрын
лучше рекламу скайпа снимай
@nasanbekov6 жыл бұрын
лучше писать double coordX = 0; прям в классе
@alexmo65387 жыл бұрын
слишком перебиваются со смыслом видео вставки и это плохо смотрится
@buzzword1237 жыл бұрын
Alex Mo вставки необходимы для лучшего усваивания материала, без них ты бы уже на полавине забыл, что там было в начале
@alexmo65387 жыл бұрын
А вот и нет, последнее видео у Дарьи прекрасно сделано.
@РоманСафин-т9ю7 жыл бұрын
Посмотрел отрывками несколько ваших видео, появляется ощущение в вашей слабой квалификации. Вам и всем я хотел бы посоветовать углубится в архитектуру эвм и машинному программированию и прочитать с полным пониманием хотя бы одну нормальную книгу. Для эффективного использования языка СИ необходимо знать что у него происходит под капотом, как он транслируется в ассемблер.