Запись ОБЪЕКТА КЛАССА в файл с++. Чтение объекта из файла c++ Для начинающих. Урок

Поделиться
HTML-код
  • Опубликовано: 2 дек 2017
  • Cамый лучший способ сказать "спасибо" - поставить лайк и и поделиться уроком с друзьями. Это очень мотивирует создавать полезные уроки =)
    Работа с файлами с++. Запись в файл. c++ ofstream. Изучение С++ для начинающих. Урок #115
    goo.gl/b7bzup
    Работа с файлами с++. Чтение из файла с++ ifstream. Изучение С++ для начинающих. Урок #116
    goo.gl/DRoSXS
    Если вам нравятся мои уроки, вы хотите поддержать меня и развитие канала, то можете сделать это тут! =)
    www.donationalerts.ru/r/simple...
    или тут
    / simplecode
    Уроки по программированию
    Наша группа ВК smplcode
    Подписывайтесь на канал / @simplecodeit

Комментарии • 174

  • @SimpleCodeIT
    @SimpleCodeIT  6 лет назад +78

    *Cамый лучший способ сказать "спасибо" - поставить лайк и и поделиться уроком с друзьями. Это очень мотивирует создавать полезные уроки =)*

    • @efimlos
      @efimlos 6 лет назад

      Где ссылки на сырцы? по мойму это не прозвучало, что вы по сути изменяете один обьект а не создайте три. ихмо это важно.

    • @game_cx
      @game_cx 4 года назад

      Для чего писать ofstream fout; и ofstream::app если и fstream... работает? Ну лично у меня

    • @user-bo8kh6zf1j
      @user-bo8kh6zf1j 4 года назад

      @@game_cx урок fstream следующий в плейлисте

  • @user-ci2ku2oo5u
    @user-ci2ku2oo5u 6 лет назад +38

    Огонь!!! Давно искала информацию по сохранению объектов с нормальными разъяснениями. Спасибо большое, наконец сдвинулась с мертвой точки!

  • @user-qp8bt7gq4b
    @user-qp8bt7gq4b 4 года назад +80

    ОЧЕНЬ ВАЖНО:
    Способ рабочий только для простейший структур. Если есть хоть одно поле string в структуре, работать не будет. Можно конечно сделать вместо string массив из char, но тогда все преимущества строк пропадают.

    • @dilivolker6135
      @dilivolker6135 2 года назад +8

      Самый полезный комментарий

    • @calamitydeadshot3143
      @calamitydeadshot3143 2 года назад

      А каким образом это можно преодолеть? Есть ли какие-то другие способы сохранить объект в класс или нужно с нуля писать методы сохранения?

    • @user-qp8bt7gq4b
      @user-qp8bt7gq4b 2 года назад

      @@calamitydeadshot3143 почитайте что такое JSON или XML

    • @vladyslavkryvoruchko
      @vladyslavkryvoruchko Год назад

      Проблема в том, что в файл сохраняется не поле строчки, а указатель на поле строчки. Естественно, при считывании по том адресу уже этой строчки возможно и нет.

    • @user-sh2pv2cb5b
      @user-sh2pv2cb5b Год назад

      @@vladyslavkryvoruchko о, получается, проблема при наличии любых данных в куче, а не только string. Сохраняются адреса, но не сами данные. Теперь надо думать, как сливать данные в файл из памяти.
      Спасибо за разъяснение.

  • @GenameSalim
    @GenameSalim 5 лет назад +39

    Благослови тебя Господь. Благодарю за уроки!)

    • @endlessvd
      @endlessvd Год назад +1

      бога нет

    • @AsdfgAsdfg12363
      @AsdfgAsdfg12363 Год назад

      @@endlessvd по любому "создатель" непременно существует.

    • @endlessvd
      @endlessvd Год назад

      @@AsdfgAsdfg12363 ну значит ты открыл только что физику, в частности теорию относительности и квантовую механику. Их действительно можно назвать нашими создателями, а все остальное ерунда

    • @saintnikija7821
      @saintnikija7821 Год назад

      @@endlessvd не будь душнилой, задрот

  • @SimpleCodeIT
    @SimpleCodeIT  6 лет назад +18

    #работасфайлами #ofstream #ifstream #SimpleCode #урокипрограммирования

  • @vladalu9794
    @vladalu9794 6 лет назад +28

    Этот урок прям вообще супер, спасибо большое, очень интересно!!!

  • @alexanderkomyakov
    @alexanderkomyakov 5 лет назад +9

    Это невероятно, огромное спасибо за это видео, я раньше всё сохранял в текст и каждый раз делал кучу лишних преобразований, теперь попробую поэкспериментировать с этим и запомню.

  • @user-so9tc1te2m
    @user-so9tc1te2m 2 года назад +2

    Видео не просто полезно, а очень и очень полезно! Огромное спасибо за труд!

  • @user-dy3bk3pb2t
    @user-dy3bk3pb2t 5 лет назад +2

    Очередное спасибо и лайк. Очень нравятся Ваши уроки. Только не останавливайтесь!

  • @timurortskhanov8527
    @timurortskhanov8527 6 лет назад +18

    Спасибо Вам . Все понятно и доходчиво. Вы как всегда СУПЕР.

  • @segars9604
    @segars9604 8 месяцев назад +3

    Спасибо за бесценный труд!)

  • @user-pk3tq5vk9b
    @user-pk3tq5vk9b 4 года назад +1

    Спасибо, очень познавательный урок!

  • @KurpatovInstagram
    @KurpatovInstagram 6 лет назад +24

    Огромное спасибо!

    • @user-lx5vv3uu8u
      @user-lx5vv3uu8u 4 года назад

      О! Класс!!! А я на Вас подписан! Даже и не подозревал, что Вы увлекаетесь программированием! )))

  • @aksogen_erishtein
    @aksogen_erishtein 6 лет назад +30

    Действительно очень полезные видео. Так держать!

  • @user-xe5jj9ur7j
    @user-xe5jj9ur7j 4 года назад +5

    спасибо вам большое Из всего ютуба ваши уроки смотрю с большим энтузиазмом и досматриваю до конца 👩‍💻👍👍👍👍👍👍👍👍👏👏👏👏👏👏👏👏

  • @andrewbistroff1199
    @andrewbistroff1199 6 лет назад +8

    Спасибо за Урок!

  • @rudikshul25
    @rudikshul25 Год назад

    Спасибо вам большое за уроки , вы очень сильно мне помогли вы изучении и в практики написании собственных и учебных проектов на c++!

  • @user-nw5iw5ew9z
    @user-nw5iw5ew9z 2 года назад

    Сергей, спасибо за урок!

  • @user-ny4zk7gj7n
    @user-ny4zk7gj7n 3 месяца назад

    Сергей нам нравиться эта тема и нравятся твои уроки!

  • @DrUlrih
    @DrUlrih 6 лет назад +13

    Думал будет перегрузка

    • @alexs7931
      @alexs7931 4 года назад

      А что это, приведение к типу?

    • @nameundef8076
      @nameundef8076 4 года назад +1

      @@alexs7931 Угу. Получаем адрес объекта и приводим указатель на объект к указателю на байты (char).

  • @user-lx5vv3uu8u
    @user-lx5vv3uu8u 4 года назад +2

    Сергей, спасибо!

  • @Antonov_Ivan.
    @Antonov_Ivan. 7 месяцев назад

    Спасибо за урок!

  • @whoammiwho6172
    @whoammiwho6172 9 месяцев назад +2

    Сложно. Но я разберусь есть цель: сделать прогу которая будет закидывать в массив слова через сортировку прогонять. Через какой ни будь API. И уже потом перевод слова будет через туже сортировку записанный клеить с словом в массиве. В общем то, что нужна инфа ононь!

  • @maxamly
    @maxamly 5 лет назад +4

    ГОСПОДИ ЭТО ПРОСТО БОХ !!! СПАСИБО!!!!! УЖЕ ГОЛОВУ СЛОМАЛ НАД ЭТИМ!

  • @user-ut7tj6bp4t
    @user-ut7tj6bp4t 4 года назад +1

    Довольно интересная тема))

  • @user-ur5kc8er8w
    @user-ur5kc8er8w 5 лет назад +9

    Огромное спасибо за уроки с классами! И небольшой совет... пользуйтесь другим блокнотом, например notepad++

  • @ruslandad365
    @ruslandad365 8 месяцев назад

    Лучшие УРОКИ!!!😊😊😊

  • @user-yw9bq1pt9v
    @user-yw9bq1pt9v 8 месяцев назад +1

    Спасибо тебе большое !!! Жаль что невыпускаешь контент про плюсы

  • @dezign_er
    @dezign_er 6 лет назад +13

    Спасибо за видео!

  • @user-gp7wc8nq3w
    @user-gp7wc8nq3w 3 года назад

    спасибо! просто лучший

  • @RrRrRrRroman
    @RrRrRrRroman Год назад

    Хороший урок!

  • @olegbocharnikov950
    @olegbocharnikov950 5 лет назад +2

    спасибо я добавил еще условие чтобы считывать определенную строчку

  • @Ermine882
    @Ermine882 6 лет назад +23

    Спасибо.

  • @user-ed3uu2lx9v
    @user-ed3uu2lx9v 10 месяцев назад +1

    Хорошее видео потому как делать. Если в классе есть виртуальные функции то и есть таблица Виртуальных функций которая также храниться в памяти объекта, твф хранит в себе адреса перехода на виртуальные функции и её изменение при считывании с файла может привести к непредвиденным результатам. Я имею ввиду при чтении неправильных данных из файла найти баг будет очень сложно.

  • @olegbocharnikov950
    @olegbocharnikov950 5 лет назад +1

    РЕСПЕКТ !!!

  • @ShishShushShashSheshShoshShysh
    @ShishShushShashSheshShoshShysh 4 года назад

    Полезный урок

  • @justkrit421
    @justkrit421 6 лет назад +6

    Спасибо огромное!

    • @SimpleCodeIT
      @SimpleCodeIT  6 лет назад +1

      Пожалуйста!

    • @justkrit421
      @justkrit421 6 лет назад

      подскажите, пожалуйста, подойдет ли такой метод для структур?

    • @user-dq2cj6ge2c
      @user-dq2cj6ge2c 6 лет назад

      Да )

  • @user-fi4pg8mc7q
    @user-fi4pg8mc7q 6 лет назад +36

    Сразу уточню я не смотрел все видео, просмотрев несколько очень понравилось как подается материал. Меня очень интересует как работать с бинарными файлами, как в них записывать, считывать информацию насколько я знаю там есть существенные отличия в сравнении с текстовыми файлами. Также интерестно узнать о возможностях работы с другими приложениями через С++ будут ли такие видео?

  • @wotmastersclub5559
    @wotmastersclub5559 8 месяцев назад +1

    Автору огромный респект за видео 👍
    А можно ли сделать дополнительные вывод на принтер

  • @user-bc4vi6hl2f
    @user-bc4vi6hl2f 6 лет назад +9

    Очень полезный урок

  • @sleepyNovember_project
    @sleepyNovember_project 5 месяцев назад

    Бинарные? Так вот что за .bin файлы, наконец-то я это узнал

  • @sgimancs
    @sgimancs 5 лет назад +5

    Ставлю лайки постоянно т. к. это очень клевые уроки по плюсам. Но год нет почему-то комментов. Или все свалили уже на модный C#...

  • @rettjaconomaili8201
    @rettjaconomaili8201 6 лет назад +10

    Дякую!!!

  • @henrikhohanyan2471
    @henrikhohanyan2471 2 года назад +2

    можно использовать reinterpret_cast(&point) место char*(&point)

  • @user-dq2cj6ge2c
    @user-dq2cj6ge2c 6 лет назад +7

    Огромное СПАСИБО, я бы даже рекламу смотрел!
    Еще бы хотелось бы увидеть видео по записи структур и вывода.
    Ставь рекламу!!!Пусть будет для тебя еще одной мотивацией=)
    ну или ты поставил, а она у меня пропала и я не могу ее смотреть.

  • @pluto2656
    @pluto2656 6 лет назад +3

    топчик

  • @user-lu3fl1se9p
    @user-lu3fl1se9p 3 года назад

    Храни тебя Господь!!! Спасибо большое 🙏🙏🙏

  • @user-kb6qd8rg4g
    @user-kb6qd8rg4g 4 года назад +1

    спасибо

  • @user-vf9gm9zn4x
    @user-vf9gm9zn4x 4 года назад

    в случае работы с виртуальными методами, нужно сделать немного иначе:
    Base *deriveClass=new Derive(); //создаем указатель на клас-наследника, через указатель на базовый клас
    char* charArray = static_cast(dynamic_cast(deriveClass)); // так выглядит преобразование полиморфического класа в масив чаров с сохранением свойств полиморфизма
    ofstream.write(charArray, sizeof(Derive)); // записываем данные.
    Точно так же проходит и считывание. Сишный стиль преобразования типов это плюсовый static_cast, а он не учитывает свойств полиморфизма, т.к. это фича плюсов

  • @yugenepopov2014
    @yugenepopov2014 8 месяцев назад

    Спасибо

  • @mykhailomorhal2181
    @mykhailomorhal2181 6 лет назад +9

    Спасибо)

  • @thetiphon
    @thetiphon 11 месяцев назад

    5:40 приводить к char'y мы будем ссылку на объект Point
    Не ссылку, а указатель. & это операция взятия адреса

  • @tree-service
    @tree-service 3 дня назад

    отлично

  • @kaynsolo
    @kaynsolo 6 лет назад +9

    Like!

  • @knizhenokdenis9671
    @knizhenokdenis9671 6 лет назад +2

    Очень все супер, один вопрос, объекты с переменными типа string и int выводит с ошибкой, просит отладить, что можно поправить???

  • @wasony.126
    @wasony.126 4 года назад

    👌👌👌👌

  • @Cempll
    @Cempll 6 лет назад +1

    Сергей, а почему вы не пользуетесь списком инициализации? Он ведь быстрее работает

  • @sleepyNovember_project
    @sleepyNovember_project 5 месяцев назад

    Выдержка с MSDN
    используются только в языке C++. Эти операторы позволяют устранить неоднозначность и возможности допустить ошибку, которые характеры для приведения типов в стиле языка C. Эти операторы перечислены ниже.
    dynamic_cast используется для преобразования полиморфных типов.
    static_cast Используется для преобразования неполиморфных типов.
    const_cast Используется для удаления constvolatileатрибутов, а также __unaligned атрибутов.
    reinterpret_cast Используется для простого переосмысления битов.
    safe_cast используется в C++/CLI для создания проверяемой MSIL.

  • @user-dp5do9xs3o
    @user-dp5do9xs3o 6 лет назад +11

    Можно следующий урок про файловый ввод/вывод? Для олимпиады очень нужно пожалуйста.

    • @user-pk3tq5vk9b
      @user-pk3tq5vk9b 4 года назад +7

      Если я всё правильно понял, это же было в двух прошлых видео? Разве нет?

    • @user-or1hy4xz8u
      @user-or1hy4xz8u 2 года назад

      @@user-pk3tq5vk9b Да, Илья, ты правильно понял...

    • @user-hl1bh9hv3u
      @user-hl1bh9hv3u Год назад

      @@user-or1hy4xz8u оба ответили друг другу через два года

    • @user-or1hy4xz8u
      @user-or1hy4xz8u Год назад

      @@user-hl1bh9hv3u лучше позже, чем никогда)))

  • @ruslanbeksmagulov9520
    @ruslanbeksmagulov9520 6 лет назад +1

    Добрый вечер!Напишите пожалуйста как можно вводить данные не закрывая консоль?(В вашей программе идет ввод и консоль закрывает,затем нужно второй раз запускать программу для повторного ввода)

  • @Nito4kin
    @Nito4kin 4 года назад

    10/10

  • @user-nw5iw5ew9z
    @user-nw5iw5ew9z 2 года назад +3

    Кстати, преобразование (char*)&point можно сделать в стиле С++, reinterpret_cast(&point). А вот через static_cast не работает.

    • @Miiazzma
      @Miiazzma Год назад +1

      Ну static_cast же работает напрямую с переменной, а не через ее псевдоним или адрес. Это лишь моя догадка, поэтому если неверно, поправьте)

  • @nozim_r2270
    @nozim_r2270 4 года назад

    👍🏿👍🏿👍🏿

  • @outlaw4Iife
    @outlaw4Iife 5 лет назад +3

    кстати можно зашифровать сообщение какое-нибудь в виде бинарного кода в блокноте)

  • @pulukchu
    @pulukchu 3 года назад

    Спасибо большое за видео!
    Объясните пожалуйста, почему при явном приведении использовался указатель? (char*) ?

    • @feewre
      @feewre 3 года назад +1

      Потому что метод read работает только с указателями на char. Но поскольку любой указатель содержит в себе лишь адрес объекта в памяти, его можно явно привести к указателю на любой другой тип. Неважно, находится ли обьект такого типа по данному адресу или нет. Дальнейшая работа с таким указателем остаётся на совести программиста

  • @nicivanov5135
    @nicivanov5135 3 года назад

    Все хорошо! Но, нужено больше примеров метов, организации данных. Чтоб случайно не изобрести велосипед 😊.

    • @user-or1hy4xz8u
      @user-or1hy4xz8u 2 года назад

      велосипеды изобретать полезно....

  • @borisshalabanov4620
    @borisshalabanov4620 6 лет назад +4

    спасибо за урок) У меня опрос: если я не закрою файл функцией fin.close(), это будет утечка динамической памяти, или я просто забуду прекратить работу с файлом?

    • @borisshalabanov4620
      @borisshalabanov4620 6 лет назад

      вопрос*

    • @0xMorgan
      @0xMorgan 5 лет назад +3

      утечки памяти не будет, будет не доступен ресурс для других приложений(тхт файл). типо как в библиотеке, ты взял почитать книгу, прочел ее, но не вернул обратно, и для других читателей она не доступна.

    • @TheWladberlin
      @TheWladberlin 4 года назад +1

      файл недоступен, и прога слетает или в лучшем случае ошибку дает. оно тебе надо?

  • @Kokurorokuko
    @Kokurorokuko 3 года назад +1

    Не совсем понимаю. Если навести на метод read, то там будет тип возвращаемого значения istream, а не bool. Тогда почему его можно использовать в while и в if?

  • @user-ld7ru8xr5k
    @user-ld7ru8xr5k 6 лет назад

    Здравствуйте,спасибо большое за ваши видео,желаю вам успехов в вашем не легком деле. Не могли бы вы поправить нумерацию уроков в первых 15-ти,чтобы изучать их по порядку.

    • @SimpleCodeIT
      @SimpleCodeIT  6 лет назад +7

      Пожалуйста, а что не так с нумерацией? Там всё по прядку.

    • @TheWladberlin
      @TheWladberlin 4 года назад +3

      Я с самого первого урока. С нуммерацией не заметил ничего крамольного, проглотил все на одном дыхании, за один день. Сиди и учи, не выпендривайся! :)

    • @Podsoznanie_Sila
      @Podsoznanie_Sila Год назад

      @@TheWladberlin ты ответил через 2 года, а через это время уже нумерацию он изменил

  • @siinon1313
    @siinon1313 5 лет назад +8

    Данный способ не сработал для меня, когда я использовал его для наследника абстрактного класса. После записи из файла в объект, при попытке вызова виртуальной функции, которая была переписана в наследнике, мне выдает ошибку доступа к памяти.

    • @exaliffeed5840
      @exaliffeed5840 4 года назад

      хм, у меня всё нормально работает, если я правильно понял, что сохранялся и читался один и тот же класс. Если же классы разные, то конечно будет ошибка, потому что размеры объектов у этих классов разные.

    • @user-vf9gm9zn4x
      @user-vf9gm9zn4x 4 года назад +1

      в случае работы с виртуальными методами, нужно сделать немного иначе:
      Base *deriveClass=new Derive(); //создаем указатель на клас-наследника, через указатель на базовый клас
      char* charArray = static_cast(dynamic_cast(deriveClass)); // так выглядит преобразование полиморфического класа в масив чаров с сохранением свойств полиморфизма
      ofstream.write(charArray, sizeof(Derive)); // записываем данные.
      Точно так же проходит и считывание. Сишный стиль преобразования типов это плюсовый static_cast, а он не учитывает свойств полиморфизма, т.к. это фича плюсов

  • @alexsklemin3708
    @alexsklemin3708 2 года назад

    Можно вопрос: а если у нас структура работать будет также?

  • @Viamsupervadetvadens
    @Viamsupervadetvadens 6 лет назад +4

    up

  • @llexDlex
    @llexDlex Год назад

    ничего непонятно, но очень интересно.

  • @Anim233
    @Anim233 3 года назад +1

    А что делать если при считки с файла, оно считывает до последнего елемента,причем считывает до последней характеристики и потом на ней же просто кидает segmentation fault?

  • @EEEppt
    @EEEppt 3 года назад +1

    Друзья интересующиеся программированием так далеко еще не заходили )))

  • @murello8404
    @murello8404 6 лет назад +10

    Как записывать класс с полем string?

    • @strongcat844
      @strongcat844 6 лет назад

      я так понимаю что со стринг тут не получиться, тк стринг имеет всегда разный обьем в битах, а тобиж если хочешь записать строку, то нужно заводить масив чаров, к примеру массив содержащий 255 символов, и кидать туда свою строку которая по обьему будет меньше 255 символов, и опять же строку брать нужно не из класса записываемого, а тобиж реализация класса с записью и использованием стринг с этим методом под вопросом. Хотя можно использовать искуственый метод который приведет все стринги к опр кол ву символов и запишет, и метод который уберет лишние символы при считывании. Тогда стринг будет одной длинны по битам

    • @user-cs3dq1st7n
      @user-cs3dq1st7n 5 лет назад +2

      String s; s.c_str()возвращает указатель на char*, который и записываете

    • @levovix
      @levovix 4 года назад +1

      @@user-cs3dq1st7n тут проблема в другом, фактически в классе хранится не строка, а её управляющий элемент (длинна, указатель на динамический массив). её надо записывать и читать отдельно, как в прочем и все динамические массивы. а с указателями вообще беда. ты его записал, прочитал, а в другом сеансе он невалиден (

  • @user-is9fv5bi7x
    @user-is9fv5bi7x 6 лет назад +4

    Добрый день. Спасибо за урок. Если в классе динамически выделяется память, после чтения объекта данного класса с файла, возникает ошибка при освобождении памяти. Могли бы Вы рассказать как обходить такие моменты?

    • @user-is9fv5bi7x
      @user-is9fv5bi7x 6 лет назад

      Когда набирал пример по вашему уроку, подобная проблема возникала даже с полем класса типа string.

    • @rwrddlr7449
      @rwrddlr7449 5 лет назад +4

      никогда так писать нельзя. это пример для обучения. гуглите сериализацию, это отдельная задача в программировании

  • @andreybazhenov9741
    @andreybazhenov9741 5 лет назад +1

    Как бороться с Eof если данных много:?

  • @flepjack
    @flepjack 3 года назад

    Вот это конечно...

  • @exaliffeed5840
    @exaliffeed5840 4 года назад +1

    сохраняются ли методы класса или же только поля?

    • @feewre
      @feewre 3 года назад +1

      Как ты собираешься записать методы класса в файл? Методы это функции для работы с обьектами класса. Обьект не содержит функции, он содержит только данные(поля).

    • @exaliffeed5840
      @exaliffeed5840 3 года назад

      @@feewre я уже давно разобрался с этим вопросом, понял уже, что только поля сохраняются

  • @aleksanderostrowski7785
    @aleksanderostrowski7785 10 месяцев назад +1

    Передача экземпляров класса , который принимает числа -работает. А что делать если хочешь передавать словп/string ???Подскажите кто нибудь.

  • @bolofficial4076
    @bolofficial4076 2 года назад

    а зачем использовать Write если можно в самой функции print записывать значение в Фаил?

  • @Ma-kt1ml
    @Ma-kt1ml Год назад

    Как записывать и считывать объекты, у которых есть полe - указатель на динамическую память?

  • @GameWorldMrKIller
    @GameWorldMrKIller 4 года назад

    уроки очень интересные, но я перешёл на книги, и изучал уже по ним, и у меня вопрос возник, есть exe файл, его нужно побайтово считать и записать в массив, после чего когда пользователь нажмёт на кнопку, то файл должен из массива снова собраться в exe и запуститься, я так понимаю, что это как то можно через fstream сделать, но как я вообще не представляю, есть тут знатоки, скиньте ссылочку, или объясните в кратце принцип, а то поиск в гугле дал мутные ответы

  • @alexeyprofit5911
    @alexeyprofit5911 5 лет назад +2

    Пожалуйста, объясните логику преобразования в этой строке: (char*)&point

    • @maxpo801
      @maxpo801 3 года назад +7

      char* - указатель, содержит адрес памяти.
      &point - не ссылка, как сказал уважаемый Сергей, видимо по ошибке, а тоже адрес объекта.
      (char*)&point обязывает рассматривать адрес объекта point как адрес на область памяти типа char.
      Ведь функция write принимает именно указатель на char

  • @alexkasimovsky2591
    @alexkasimovsky2591 5 лет назад +1

    а можно вот так: write(reinterpret_cast(&o), sizeof(o));

    • @feewre
      @feewre 5 лет назад +3

      Можно. Один хер, программа у всех вылетает после отработки

  • @user-of6hd5gv5p
    @user-of6hd5gv5p 3 года назад

    Разве на не нужно поместить .close(),в блок else, то есть, если файл не открылся, то зачем его закрывать, и не вызовет ли это ошибки?

  • @user-sd6wq1dy5i
    @user-sd6wq1dy5i 5 лет назад +1

    у меня ошибка Ошибка C2039 write: не является членом "std::basic_ifstream" Project1 c:\c++\project1\project1\main.cpp 39

  • @user-jp8fr4lz4c
    @user-jp8fr4lz4c 2 года назад

    1:16 - Есть способ, с помощью которого мы можем не работать. Ага, так и запишем )

  • @TheWladberlin
    @TheWladberlin 4 года назад +5

    Для записи и для чтения намного удобнее использовать отдельные функции с входными параметрами path и point. Через ссылки сделал. Может кому-то поможет:
    void fileOpenWrite(string &path, Point &point)
    {
    ofstream fout;
    fout.open(path, ofstream::app);
    if (fout.is_open()) {
    cout

  • @andr74b11
    @andr74b11 3 года назад

    А как мі понимаем, что в fin.read() нужно считать sizeof(Point) именно тот, который нам нужен?

    • @Kokurorokuko
      @Kokurorokuko 3 года назад

      sizeof(point) всегда один и тот же, если там нет полей string.

  • @user-sf5zv4jc5v
    @user-sf5zv4jc5v 2 года назад

    Это же сериализация?

  • @illiahrynov3213
    @illiahrynov3213 3 года назад

    никто не подскажет почему после чтения файла в структуру, массив структуры больше не хочет менять свой размер. к примеру,у меня телефонная книга созданная массивом струкруры,пользователь добавляются и удаляются отлично когда работаешь с клавиатуры,но когда заполнил свою струкутру из файла, уже не возможно ни добавить пользователя ни удалить его

  • @olegbocharnikov950
    @olegbocharnikov950 5 лет назад

    у меня там к прошлому уроку

  • @BrownAleks
    @BrownAleks 4 года назад +3

    Конечно спасибо за урок! Но у меня осталось очень много вопросов. Сдаётся мне такое ощущение, что эту тему во круг функций: fout.write((char*)&point, sizeof(Point)); и fin.read((char*)&pnt, sizeof(Point)); Вы осветили очень, и очень поверхностно. Каким образом функция понимает, что именно и в каком количестве сохранить и прочитать? Ка сохранять сложные, унаследованные классы, с вложенными классами как быть? Как сохранить массив экземпляров класса? Поштучно, или есть варианты, сразу пачкой? Эти функции нормально работают, если говорить о нескольких строках записи. А попробуйте в цикле записать 10тыс. строк, и прочитать их. Количество записанных и количество прочитанных строк сильно разнятся, даже в таком простом варианте, как в Вашем примере.
    Лайки авансом, в надежде, что на эти вопросы я найду ответы в Ваших следующих видео.

    • @lacklacktriplehack4174
      @lacklacktriplehack4174 2 года назад

      сам гугли находи и экспериментируй
      неужто всё разжевывать нужно?

    • @BrownAleks
      @BrownAleks 2 года назад +1

      @@lacklacktriplehack4174 На давность комминта не смотришь чтоль? Уже всё давно за гуглил и нашёл. =)

    • @lacklacktriplehack4174
      @lacklacktriplehack4174 2 года назад

      @@BrownAleks это на будущее другим челикам
      что сенсей не обязан разжевывать всё от корки до корки

  • @user-vx8rc5ob5x
    @user-vx8rc5ob5x 3 года назад

    А в чистом виде, обект вписать реально?

    • @Kokurorokuko
      @Kokurorokuko 3 года назад

      Что значит в чистом виде? Если Вы имеете в виду так, чтобы можно было открыть файл и прочесть данные, то можно просто выводить текстом поля объекта (это материалы прошлых уроков)

  • @pubgr862
    @pubgr862 5 лет назад +1

    Почему это не работает для объектов string выдаёт ошибку доступа на выходе из самой программы

    • @alexeyprofit5911
      @alexeyprofit5911 5 лет назад

      вроде бы со стрингом и динамической памятью нельзя работать.

    • @pubgr862
      @pubgr862 5 лет назад

      Alexey Profit если только стринг сам использует динамическую память, сам я в коде не выделял 🤷🏿‍♂️

    • @seltsov1
      @seltsov1 4 года назад +2

      Как я понял string использует динамический массив чаров. При вытаскивании объекта из файла методом read, создается не новый объект, а еще один указатель на старый объект, поэтому на выходе из программы чистится одна и та же область динамической памяти дважды и происходит утечка. Я для себя решил эту проблему так:
      string str("sss");
      ofstream infile;
      infile.open("text.txt");
      if (!infile.is_open()) cout

  • @vladyslavkryvoruchko
    @vladyslavkryvoruchko Год назад

    А если в файл записать вообще рандомные символы, и потом считать и привести в Point, то у нас выйдет случайная точка!

  • @aidenforbidden6518
    @aidenforbidden6518 6 лет назад

    Это случайно не бинарная сериализация?

  • @vladpetriuk7025
    @vladpetriuk7025 5 лет назад

    как так коментировать как Сергей в видео?!? хелп

    • @TheWladberlin
      @TheWladberlin 4 года назад

      Легко.
      Комментировать: [Str]+[k]+[c]
      Декомменторовать: [Str]+[k]+[u]