Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/6: Рейтинг темы: голосов - 6, средняя оценка - 4.67
2 / 2 / 0
Регистрация: 08.01.2016
Сообщений: 491
1

создать независимый образец объекта

23.05.2020, 23:28. Показов 1230. Ответов 10
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Добрый вечер,

Есть образец класса (указатель) MyClass* obj = new MyClass;
Затем я каким-то образом изменяю этот объект вызывая методы этого класса obj->setData(data);
Таким образом я присвоил какие-то данные этому объекту.

Теперь мне необходимо скопировать объект obj в новую переменную (выделить новый участок памяти) в objNew, при этом:
1) objNew должен располагать установленными ранее данными data
2) при последующих изменениях одного из этих двух объектов, второй объект меняться не должен (то есть эти объекты должны быть независимы друг от друга)

Вопрос: как создать такую независимую копию объекта?
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
23.05.2020, 23:28
Ответы с готовыми решениями:

Необходимо создать минимальный проект-образец в DEV C++
Минимальный, ну, чтобы там 2 файла, что ли было. main.cpp и functsia.cpp, Бог даст- получится-...

Как создать независимый процесс?
QProcess *process = new QProcess(); QString appName = QCoreApplication::applicationFilePath(); ...

[emu8086] Создать матрицу по заданному образцу (переделать образец для emu8086)
Нужно данный код переделать для ему8086. Задать матрицу по заданному образцу@stack segment para...

Создать проект, с использованием объекта Timer, перемещение графического объекта по заданной траектории, (прямоугольник,
Создать проект, с использованием объекта Timer, перемещение графического объекта по заданной...

10
19409 / 10028 / 2443
Регистрация: 30.01.2014
Сообщений: 17,678
23.05.2020, 23:52 2
Kerim_Geophysic, паттерн "прототип".
1
2 / 2 / 0
Регистрация: 08.01.2016
Сообщений: 491
23.05.2020, 23:57  [ТС] 3
DrOffset, не уловил
для моей задачи надо новый класс писать?
0
19409 / 10028 / 2443
Регистрация: 30.01.2014
Сообщений: 17,678
24.05.2020, 00:29 4
Цитата Сообщение от Kerim_Geophysic Посмотреть сообщение
для моей задачи надо новый класс писать?
Нет.
Надо вашему классу добавить функцию clone, которая будет создавать копию.
1
900 / 477 / 93
Регистрация: 10.06.2014
Сообщений: 2,698
24.05.2020, 00:38 5
DrOffset,
Судя по задаче clone ему даже не нужен Конструктор копирования скорее сойдёт. Это по сути тот же clone, только встроенный ) Хотя могут быть варианты. Например, если в целом требуется сохранить принцип прототипа, но процесс копирования должен отличаться от того принципа по которому реализован конструктор копирования. В таком случае уже да, clone нужен будет...
1
2 / 2 / 0
Регистрация: 08.01.2016
Сообщений: 491
24.05.2020, 00:44  [ТС] 6
Undisputed, DrOffset, спасибо за ответы
Чуть чуть поясню.
Я бы не хотел создавать прототип класса MyClass.
Если представить, что объект obj в оперативной памяти занимает 1 килобайт и находится он где-то в 0x1FFAAF (какой то адрес памяти), то мне надо скопировать этот 1 килобайт памяти в другой адрес. Грубо говоря, в итоге будет занято 2 килобайта оперативки.
может быть memcpy() что то подобное делает, но там надо будет указывать сколько памяти занимает obj, а я не знаю как это определить...
Мне кажется должен быть простой способ "в одну строчку кода"
0
19409 / 10028 / 2443
Регистрация: 30.01.2014
Сообщений: 17,678
24.05.2020, 00:48 7
Цитата Сообщение от Kerim_Geophysic Посмотреть сообщение
Чуть чуть поясню.
Честно говоря, стало только хуже Т.е. это пояснение только все запутало.
Давайте по-другому как-то.

Цитата Сообщение от Kerim_Geophysic Посмотреть сообщение
Если представить, что объект obj в оперативной памяти занимает 1 килобайт и находится он где-то в 0x1FFAAF (какой то адрес памяти), то мне надо скопировать этот 1 килобайт памяти в другой адрес. Грубо говоря, в итоге будет занято 2 килобайта оперативки.
Это плохо или хорошо?

Цитата Сообщение от Kerim_Geophysic Посмотреть сообщение
может быть memcpy() что то подобное делает, но там надо будет указывать сколько памяти занимает obj, а я не знаю как это определить...
sizeof?

Добавлено через 1 минуту
Kerim_Geophysic, давайте какой-то более менее вменяемый пример того, что вы хотите. Иначе толку не будет.
1
900 / 477 / 93
Регистрация: 10.06.2014
Сообщений: 2,698
24.05.2020, 00:50 8
Kerim_Geophysic,
C++
1
MyClass objNew = *obj;
Не пробовали? Только здесь надо знать что из себя представляет сам класс, какие у него поля. Иначе словить UB не составит труда
0
2 / 2 / 0
Регистрация: 08.01.2016
Сообщений: 491
24.05.2020, 01:06  [ТС] 9
DrOffset,
Цитата Сообщение от DrOffset Посмотреть сообщение
Это плохо или хорошо?
это мне так надо
Вот что я делаю (в Qt):

есть виджет QTreeView который создает графический элемент в котором можно отобразить в виде дерева древовидный модель данных (типа файловая система)
Этот виджет принимает модель QStandardItemModel, которая в свою очередь заполняется элементами QStandardItem

Так вот представьте, у меня один QTreeView виджет и по началу одна модель QStandardItemModel с заполненными полями. В некоторый момент (по нажатии на кнопку) надо заполненную модель скопировать и отобразить эту скопированную модель в QTreeView.
В связи с тем, что юзер может изменять поля модели, отображенной в QTreeView, после копирования работа пользователя должна производиться только с той моделью, которая отображается в QTreeView.

Теперь пример кода:
C++
1
2
3
4
5
QStandardItem* item= new QStandardItem("MyItem");
QStandardItemModel* model_1 = new QStandardItemModel;
model_1->setHorizontalHeaderItem( 0, treeItem ); // добавляю itemкак заголовок для модели
QStandardItemModel* model_2 = new QStandardItemModel;
memcpy(model_1 , model_2, sizeof(model_2)); // не получается, в model_1 отсутствует заголовок item
Цитата Сообщение от Undisputed Посмотреть сообщение
Не пробовали? Только здесь надо знать что из себя представляет сам класс, какие у него поля. Иначе словить UB не составит труда
мне надо создать именно указатель
0
19409 / 10028 / 2443
Регистрация: 30.01.2014
Сообщений: 17,678
24.05.2020, 01:12 10
Лучший ответ Сообщение было отмечено Kerim_Geophysic как решение

Решение

Цитата Сообщение от Kerim_Geophysic Посмотреть сообщение
memcpy(model_1 , model_2, sizeof(model_2)); // не получается, в model_1 отсутствует заголовок item
Забудьте об этом. Оно неверно от слова совсем.

Вам здесь 100% нужен паттерн прототип. Есть хорошая новость, Qt его поддерживает для QStandardItem: https://doc.qt.io/qt-5/qstandarditem.html#clone

Добавлено через 2 минуты
C++
1
2
3
4
5
6
7
8
9
QStandardItemModel * cloneModel(QStandardItemModel * from)
{
    QStandardItemModel * to = new QStandardItemModel(from->parent());
    for (int i = 0; i < from->rowCount() ; i++)
    {
        to->appendRow(from->item(i)->clone());
    }
    return to;
}
1
2 / 2 / 0
Регистрация: 08.01.2016
Сообщений: 491
24.05.2020, 01:15  [ТС] 11
DrOffset, спасибо большое!
надо Вы очень помогли
буду пробовать, разбираться
0
24.05.2020, 01:15
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
24.05.2020, 01:15
Помогаю со студенческими работами здесь

Создать функцию для обработки символьных строк. За образец брать библиотечные функции обработки строк языка С, но не применять их в своей функции
Доброго времени суток! Крайне необходима помощь экспертов в С++! Кто может - не оставьте меня в...

Независимый таймер
Работаю в WindowsForms C# Express 2010 на Win7. У меня появился вопрос - можно ли создать таймер,...

Независимый exe
вот ссылка https://www.cyberforum.ru/cpp-beginners/thread562646-page2.html#post2994793 там есть...

Независимый счётчик
А никто не знает какого- нибудь сайта, который обеспечивает независимый учёт посещений ОДНОЙ...

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

Независимый процесс
Здравствуйте! Задача стояла такая: Если приложение аварийно завершилось, автоматически запускать...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Новые блоги и статьи
Проектирование и моделирование
hw_wired 28.01.2025
Введение в моделирование Моделирование представляет собой один из фундаментальных методов научного познания, который позволяет изучать объекты и явления через создание их упрощенных аналогов. В. . .
Алгоритмы и исполнители
hw_wired 28.01.2025
Введение в алгоритмы В современном мире информационных технологий алгоритмы играют основополагающую роль в решении различных задач и автоматизации процессов. Алгоритм представляет собой точную. . .
Хранение информации
hw_wired 28.01.2025
Введение: Роль систем хранения информации в современном мире В современную эпоху цифровых технологий эффективное хранение информации становится одним из ключевых факторов успешного развития любой. . .
Обработка числовой информации
hw_wired 28.01.2025
Введение в обработку числовой информации В современном мире обработка числовой информации стала неотъемлемой частью как профессиональной деятельности, так и повседневной жизни. Электронные таблицы. . .
Мультимедиа
hw_wired 28.01.2025
Введение в мультимедийные технологии В современном мире мультимедийные технологии стали неотъемлемой частью нашей жизни, проникнув во все сферы человеческой деятельности. Термин "мультимедиа". . .
Обработка текстовой информации
hw_wired 28.01.2025
Введение в обработку текстовой информации В современном мире обработка текстовой информации играет фундаментальную роль в различных сферах человеческой деятельности. Текстовые редакторы стали. . .
Обработка графической информации
hw_wired 28.01.2025
Введение в компьютерную графику Компьютерная графика стала неотъемлемой частью современного цифрового мира, пройдя впечатляющий путь развития от простейших черно-белых изображений до сложных. . .
Python в Алгоритмике: Решение задач
hw_wired 28.01.2025
Введение в Python и Алгоритмику В современном мире программирование стало неотъемлемой частью образования и профессионального развития. Python зарекомендовал себя как один из самых популярных и. . .
Компьютер как универсальное устройство для работы с информацией
hw_wired 28.01.2025
Введение в устройство компьютера Компьютер представляет собой универсальное электронное устройство, предназначенное для автоматической обработки информации. В современном мире компьютер стал. . .
Информация и информационные процессы
hw_wired 28.01.2025
Понятие информации и ее виды В современном мире информация является одним из фундаментальных понятий, пронизывающих все сферы человеческой деятельности. Под информацией понимают любые сведения об. . .
Алгоритмика
hw_wired 28.01.2025
Введение: Основы алгоритмики и её роль в информатике В современном мире программирование и алгоритмическое мышление стали неотъемлемой частью образования и профессиональной деятельности. . . .
Информационное моделирование
hw_wired 28.01.2025
Введение в информационное моделирование В современном мире информационное моделирование стало неотъемлемой частью научной, образовательной и профессиональной деятельности. Это мощный инструмент. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru