2 / 2 / 0
Регистрация: 08.01.2016
Сообщений: 491
|
|
1 | |
создать независимый образец объекта23.05.2020, 23:28. Показов 1230. Ответов 10
Метки нет (Все метки)
Добрый вечер,
Есть образец класса (указатель) MyClass* obj = new MyClass; Затем я каким-то образом изменяю этот объект вызывая методы этого класса obj->setData(data); Таким образом я присвоил какие-то данные этому объекту. Теперь мне необходимо скопировать объект obj в новую переменную (выделить новый участок памяти) в objNew, при этом: 1) objNew должен располагать установленными ранее данными data 2) при последующих изменениях одного из этих двух объектов, второй объект меняться не должен (то есть эти объекты должны быть независимы друг от друга) Вопрос: как создать такую независимую копию объекта?
0
|
23.05.2020, 23:28 | |
Ответы с готовыми решениями:
10
Необходимо создать минимальный проект-образец в DEV C++ Как создать независимый процесс? [emu8086] Создать матрицу по заданному образцу (переделать образец для emu8086) Создать проект, с использованием объекта Timer, перемещение графического объекта по заданной траектории, (прямоугольник, |
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 |
Нет.
Надо вашему классу добавить функцию 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 |
Честно говоря, стало только хуже Т.е. это пояснение только все запутало.
Давайте по-другому как-то. Это плохо или хорошо? sizeof? Добавлено через 1 минуту Kerim_Geophysic, давайте какой-то более менее вменяемый пример того, что вы хотите. Иначе толку не будет.
1
|
900 / 477 / 93
Регистрация: 10.06.2014
Сообщений: 2,698
|
||||||
24.05.2020, 00:50 | 8 | |||||
Kerim_Geophysic,
0
|
2 / 2 / 0
Регистрация: 08.01.2016
Сообщений: 491
|
||||||
24.05.2020, 01:06 [ТС] | 9 | |||||
DrOffset,
это мне так надо
Вот что я делаю (в Qt): есть виджет QTreeView который создает графический элемент в котором можно отобразить в виде дерева древовидный модель данных (типа файловая система) Этот виджет принимает модель QStandardItemModel, которая в свою очередь заполняется элементами QStandardItem Так вот представьте, у меня один QTreeView виджет и по началу одна модель QStandardItemModel с заполненными полями. В некоторый момент (по нажатии на кнопку) надо заполненную модель скопировать и отобразить эту скопированную модель в QTreeView. В связи с тем, что юзер может изменять поля модели, отображенной в QTreeView, после копирования работа пользователя должна производиться только с той моделью, которая отображается в QTreeView. Теперь пример кода:
0
|
19409 / 10028 / 2443
Регистрация: 30.01.2014
Сообщений: 17,678
|
||||||
24.05.2020, 01:12 | 10 | |||||
Сообщение было отмечено Kerim_Geophysic как решение
Решение
Забудьте об этом. Оно неверно от слова совсем.
Вам здесь 100% нужен паттерн прототип. Есть хорошая новость, Qt его поддерживает для QStandardItem: https://doc.qt.io/qt-5/qstandarditem.html#clone Добавлено через 2 минуты
1
|
2 / 2 / 0
Регистрация: 08.01.2016
Сообщений: 491
|
|
24.05.2020, 01:15 [ТС] | 11 |
DrOffset, спасибо большое!
надо Вы очень помогли буду пробовать, разбираться
0
|
24.05.2020, 01:15 | |
24.05.2020, 01:15 | |
Помогаю со студенческими работами здесь
11
Создать функцию для обработки символьных строк. За образец брать библиотечные функции обработки строк языка С, но не применять их в своей функции Независимый таймер Независимый exe Независимый счётчик Независимый exe Независимый процесс Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи | |||||
Проектирование и моделирование
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
Введение в информационное моделирование
В современном мире информационное моделирование стало неотъемлемой частью научной, образовательной и профессиональной деятельности. Это мощный инструмент. . .
|