Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
koker007
14 / 17 / 0
Регистрация: 04.08.2015
Сообщений: 311
Завершенные тесты: 2
#1

Полное (побитовое) копирование объекта одной строчкой кода. не ссылки - C++

18.11.2017, 23:35. Просмотров 194. Ответов 3
Метки нет (Все метки)

Добрый день, подскажите пожалуйста, как быстро и безболезненно можно скопировать значения одного объекта в другой.
Я создал класс и чтобы скопировать абсолютно все значения экземпляра этого класса в другой экземпляр этого же класса я создал специально функцию в этом классе, где у этого класса перебираются все существующие значения и копируются в этот экземпляр.. Но дело в том что по мере наращивания этого класса приходится каждый раз дописывать новые значения в функцию копирования.. Эта функция становится довольно объемной.

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

Добавлено через 1 час 6 минут
Можно с использованием sizeof(class_name)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
18.11.2017, 23:35
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Полное (побитовое) копирование объекта одной строчкой кода. не ссылки (C++):

Побитовое копирование double - C++
Доброго времени суток! Преамбула: В целях интеграции Lua в движок C++ пытаюсь написать класс который может помещать в себя все типы...

Работа с пикселями, побитовое копирование - C++
**Задание: Написать программу, осуществляющую побитовое копирование из одного изображения в другое. Изображение открывается через диалог...

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

Как соединить элементы списка одной строчкой кода - C#
Добрый день! Есть List<string> с несколькими элементами. Подскажите, как максимально коротким кодом сделать string, где эти элементы...

Одной строчкой кода получить список директорий с нулевым размером - C#
Добрый день! Как одной строчкой кода (с помощью Linq) получить список директорий (включая вложенные), у которых размер на диске равен...

Полное копирование объекта - C#
Возможно ли клонировать экземпляр класса, который не реализует интерфейс System.IClonable (не содержит метод Clone() )? Или нужно...

3
COKPOWEHEU
749 / 587 / 102
Регистрация: 09.09.2017
Сообщений: 2,560
18.11.2017, 23:35 #2
memcpy
Не забудьте что если внутри объекта есть указатели - они и будут скопированы как указатели, без выделения дополнительной памяти
1
notAll
440 / 162 / 39
Регистрация: 27.05.2016
Сообщений: 438
Завершенные тесты: 2
18.11.2017, 23:46 #3
Цитата Сообщение от koker007 Посмотреть сообщение
где у этого класса перебираются все существующие значения и копируются в этот экземпляр
Как бы стандартные синтезируемые функции копирования (конструктор копирования и оператор присваивания) это делают сами.
0
koker007
14 / 17 / 0
Регистрация: 04.08.2015
Сообщений: 311
Завершенные тесты: 2
19.11.2017, 01:48  [ТС] #4
Цитата Сообщение от COKPOWEHEU Посмотреть сообщение
memcpy
Спасибо большое, вроде бы то что надо.

Добавлено через 2 часа 1 минуту
Цитата Сообщение от notAll Посмотреть сообщение
это делают сами
Да.. я так и сделал, но memcpy должна сильно упростить мне задачу. Пока не проверил, это работает или нет, но выглядит так.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
class data_client_comands {
private:
    struct main_data_client
    {
        string my_nick_name;
        GLfloat my_color_x = 0;
        GLfloat version_game = 0;
    };
    main_data_client main_data;
 
    //200 последних команд клиента
    one_client_comand comands_[200];
 
public:
    data_client_comands() {
    
    }
 
    data_client_comands(const data_client_comands& func_pointer_client_data) {
        memcpy(this, &func_pointer_client_data, sizeof(data_client_comands));
    }
 
};
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
19.11.2017, 01:48
Привет! Вот еще темы с ответами:

полное копирование информации из одной таблицы в другую - C++ Builder БД
Здраствуйте. Есть 2 таблицы с одинаковыми полями. копирование 1строки из первой таблицы во 2-ую делаютак:...

Парсинг толко одной ссылки(из всего html кода) - C#
Итак что я имею: Программа делает все функции, осталось сделать одно спарсить строку с ссылкой на профиль вот сама ссылка которую надо...

Копирование модуля из одной книги в другую с помощью кода - VBA
Зравствуйте. Скажите пожалуйста как скопировать модуль из одной книги в другую с помощью кода?

Не могу разобраться со строчкой кода - Matlab
Вот фрагмент кода: for i=1:2 Fk(i)=eval(Funct(i,:)); Не могу разобраться, что обозначает символ ":"!!! Добавлено через 3 минуты ...


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru