Форум программистов, компьютерный форум, киберфорум
C++/CLI
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.92/13: Рейтинг темы: голосов - 13, средняя оценка - 4.92
 Аватар для Kold
0 / 0 / 0
Регистрация: 16.05.2013
Сообщений: 14

Реализация конструктора копирования

30.01.2016, 15:30. Показов 2800. Ответов 10
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Как в С++/Сli написать конструктор копирования?
Пересмотрел кучу материалов везде только под С++
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
30.01.2016, 15:30
Ответы с готовыми решениями:

Реализация конструктора копирования и перегрузки =
#include <iostream> #include <cstring> using namespace std; class Cow{ private: char name; char *...

Реализация конструктора копирования для класса
P.S плохо с русским Этот конструктор копирования сломал мне мозг И вот что я понемаю когда мы делаем так foo objCopy(obj); ...

Реализация конструктора копирования для двумерного динамического массива
Практически реализовал, не понимаю, почему не получается... #include <iostream> #include <time.h> using namespace std; ...

10
Эксперт .NET
 Аватар для Usaga
14138 / 9367 / 1350
Регистрация: 21.01.2016
Сообщений: 35,235
30.01.2016, 17:28
Цитата Сообщение от Kold Посмотреть сообщение
Пересмотрел кучу материалов везде только под С++
Это потому, что данный аспект у обоих языков совпадает...
0
 Аватар для Kold
0 / 0 / 0
Регистрация: 16.05.2013
Сообщений: 14
30.01.2016, 17:43  [ТС]
При такой строчке выдает ошибку
C++
1
Zaryad(Zaryad& b);
CLI.cpp(43): error C3699: &: это косвенное обращение невозможно использовать для типа "Zaryad"

Zaryad это походной от абстрактного ref класа
0
Эксперт .NET
 Аватар для Usaga
14138 / 9367 / 1350
Регистрация: 21.01.2016
Сообщений: 35,235
30.01.2016, 19:39
Вот тут всё доходчиво разъясняется...
1
 Аватар для Kold
0 / 0 / 0
Регистрация: 16.05.2013
Сообщений: 14
30.01.2016, 20:44  [ТС]
Спасибо
0
Комп_Оратор)
Эксперт по математике/физике
 Аватар для IGPIGP
9006 / 4707 / 630
Регистрация: 04.12.2011
Сообщений: 14,003
Записей в блоге: 16
31.01.2016, 01:17
Цитата Сообщение от Kold Посмотреть сообщение
Как в С++/Сli написать конструктор копирования?
Kold, вообще говоря никак. Тут мир ссылок и копирование ссылки семантически не соответствует копированию объекта в "родных" плюсах. Однако можно клонировать объекты если Вам нужен, действительно, новый экземпляр. Тут нужно хорошо подумать. Kold, это кажется невероятным, но обычно оказывается, что копия объекта не нужна. Нужен алгоритм который обойдётся имеющимся объектом, сохраняющий, временно, какие-то детали, но не создающий копию аж всего, целого объекта.
Но если это нужно, то нужно написать свой метод клонирования. Правильный путь, - унаследовать интерфейс IClonable, наверное. То есть конструктор не нужен.
0
Эксперт .NET
 Аватар для Usaga
14138 / 9367 / 1350
Регистрация: 21.01.2016
Сообщений: 35,235
31.01.2016, 07:55
IGPIGP, вообще говоря с C++\CLI копирующие конструкторы есть.
2
Комп_Оратор)
Эксперт по математике/физике
 Аватар для IGPIGP
9006 / 4707 / 630
Регистрация: 04.12.2011
Сообщений: 14,003
Записей в блоге: 16
31.01.2016, 11:18
Цитата Сообщение от Usaga Посмотреть сообщение
, вообще говоря
Предварительно:
Я увидел разъяснение о создании экземпляра с помощью объявления переменной (семантика С-стека). То есть рассказывается о неявном вызове конструктора по умолчанию. Это плохо как я понимаю, так как объявление пустой ссылки с отложенной инициализацией невозможно. Теперь при попытке создать таковую будет создаваться объект. В Майкрософт что-то происходит.
То что называется конструктором копии вызывается с аргументом "значение". Я такого не знал и прекрасно без него обходился.
Нужно почитать и поэкспериментировать. Не разобрался ещё и не поверил ещё.
0
Эксперт .NET
 Аватар для Usaga
14138 / 9367 / 1350
Регистрация: 21.01.2016
Сообщений: 35,235
31.01.2016, 12:28
IGPIGP, я сам только недавно узнал . Как вы и сказали в посте выше, ссылок вполне достаточно, что бы комфортно работать. За почти год работы C# разработчиком ещё ни разу не поймал себя на мысли "А вот тут бы мне пригодился копирующий конструктор". В С++\CLI он больше нужен как дань традиции))
0
Комп_Оратор)
Эксперт по математике/физике
 Аватар для IGPIGP
9006 / 4707 / 630
Регистрация: 04.12.2011
Сообщений: 14,003
Записей в блоге: 16
31.01.2016, 12:44
Цитата Сообщение от Usaga Посмотреть сообщение
Как вы и сказали в посте выше, ссылок вполне достаточно
Это просто другая модель мышления. Я не вижу смысла в конструкторе копий если передача в вызове и возврат идут всё равно по ссылке. Это даже вредит. Ведь основная причина наличия такого конструктора в том чтобы обслуживать эту потребность. Тут же её не просто нет. Тут она вредна как рецидив...
Ведь по нормальной схеме механизм стека отрабатывает передачу копии ссылки. Передача копии значения не предусмотрена для ссылочных классов в автоматическом режиме. Тогда всё связанное с такими конструкторами копирования это замусоривание мозга. Есть клонирование же. Посмотрите какие глаза у людей которые ринулись из С++ в .NET с фразочкой "щас быстренько нашлёпаю ГУЙ". Результат получается неожиданный, мягко говоря. Им бедолагам и так хватает, а если ещё и это добавить, то...
Думаю C++/CLI переходит в новую фазу. А жаль.
0
Администратор
Эксперт .NET
 Аватар для tezaurismosis
9673 / 4825 / 763
Регистрация: 17.04.2012
Сообщений: 9,664
Записей в блоге: 14
03.02.2016, 16:13
Поддержу мысль о том, что такой конструктор копирования оставлен или как дань традиции или один из способов облегчения взаимодействия чистых плюсов с C++/CLI.
Вообще говоря, эта возможность для .NET является излишней. Оператор равенства переопределить невозможно, а размещением экземпляров управляемых типов занимается CLR, а не программист. Единственное, что он решает - выбрать значимый или ссылочный тип. Создать же один экземпляр на основе другого можно с помощью
C++
1
2
3
4
5
6
7
class Dummy
{
public:
    Dummy(Dummy^ previous) {
        // ...
    }
}
это тоже конструктор копирования в духе C#, но его вызов осуществляется исключительно руками с помощью gcnew.
Цитата Сообщение от IGPIGP Посмотреть сообщение
Правильный путь, - унаследовать интерфейс IClonable, наверное.
Я сначала немного удивился, когда обнаружил, что ICloneable не имеет обобщённой версии, а кажется: надо бы! Но потом понял, что Майкрософт так делает в тех случаях, когда не хочет, чтобы программисты его использовали. Примеры - IHashCodeProvider и HybridDictionary, обречённые на забвение.
Ну и, собственно, про ICloneable MSDN пишет
The ICloneable interface simply requires that your implementation of the Clone method return a copy of the current object instance. It does not specify whether the cloning operation performs a deep copy, a shallow copy, or something in between. Nor does it require all property values of the original instance to be copied to the new instance. For example, the NumberFormatInfo.Clone method performs a shallow copy of all properties except the NumberFormatInfo.IsReadOnly property; it always sets this property value to false in the cloned object. Because callers of Clone cannot depend on the method performing a predictable cloning operation, we recommend that ICloneable not be implemented in public APIs.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
03.02.2016, 16:13
Помогаю со студенческими работами здесь

В чём отличия конструктора копирования и конструктора перемещения? Где и как их нужно использовать?
Помогите разобраться в копирующем и перемещающем конструкторах. В чём их существенное отличие и какой плюс от использования перемещающего...

Касательно конструктора копирования
Вопрос следующий. У меня есть класс "Точки" есть класс "группы" и есть класс "возможные группы". 3 класса. в классе...

Подскажите реализацию конструктора копирования
Подскажите пожалуйста как реализовать конструктор копирования. #include <iostream> #include <stdio.h> #include <math.h> ...

Не понятна работа конструктора копирования
Добрый день! Читаю Шилдта базовый курс. Дошел до конструктора копии.В книжных примерах вроде все понятно было. Перешел на перегрузку...

Грамотное использование конструктора копирования
Всем добрый вечер. Есть класс list(двухсвязный). Задача гласит: Сгенерировать некоторую последовательность чисел, вывести на экран, и затем...


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

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Основы отладки веб-приложений на SDL3 по USB и Wi-Fi, запущенных в браузере мобильных устройств
8Observer8 07.02.2026
Содержание блога Браузер Chrome имеет средства для отладки мобильных веб-приложений по USB. В этой пошаговой инструкции ограничимся работой с консолью. Вывод в консоль - это часть процесса. . .
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru