Аватар для Kold
0 / 0 / 0
Регистрация: 16.05.2013
Сообщений: 14

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

30.01.2016, 15:30. Показов 2834. Ответов 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
14307 / 9388 / 1355
Регистрация: 21.01.2016
Сообщений: 35,410
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
14307 / 9388 / 1355
Регистрация: 21.01.2016
Сообщений: 35,410
30.01.2016, 19:39
Вот тут всё доходчиво разъясняется...
1
 Аватар для Kold
0 / 0 / 0
Регистрация: 16.05.2013
Сообщений: 14
30.01.2016, 20:44  [ТС]
Спасибо
0
Комп_Оратор)
Эксперт по математике/физике
 Аватар для IGPIGP
9007 / 4708 / 630
Регистрация: 04.12.2011
Сообщений: 14,003
Записей в блоге: 16
31.01.2016, 01:17
Цитата Сообщение от Kold Посмотреть сообщение
Как в С++/Сli написать конструктор копирования?
Kold, вообще говоря никак. Тут мир ссылок и копирование ссылки семантически не соответствует копированию объекта в "родных" плюсах. Однако можно клонировать объекты если Вам нужен, действительно, новый экземпляр. Тут нужно хорошо подумать. Kold, это кажется невероятным, но обычно оказывается, что копия объекта не нужна. Нужен алгоритм который обойдётся имеющимся объектом, сохраняющий, временно, какие-то детали, но не создающий копию аж всего, целого объекта.
Но если это нужно, то нужно написать свой метод клонирования. Правильный путь, - унаследовать интерфейс IClonable, наверное. То есть конструктор не нужен.
0
Эксперт .NET
 Аватар для Usaga
14307 / 9388 / 1355
Регистрация: 21.01.2016
Сообщений: 35,410
31.01.2016, 07:55
IGPIGP, вообще говоря с C++\CLI копирующие конструкторы есть.
2
Комп_Оратор)
Эксперт по математике/физике
 Аватар для IGPIGP
9007 / 4708 / 630
Регистрация: 04.12.2011
Сообщений: 14,003
Записей в блоге: 16
31.01.2016, 11:18
Цитата Сообщение от Usaga Посмотреть сообщение
, вообще говоря
Предварительно:
Я увидел разъяснение о создании экземпляра с помощью объявления переменной (семантика С-стека). То есть рассказывается о неявном вызове конструктора по умолчанию. Это плохо как я понимаю, так как объявление пустой ссылки с отложенной инициализацией невозможно. Теперь при попытке создать таковую будет создаваться объект. В Майкрософт что-то происходит.
То что называется конструктором копии вызывается с аргументом "значение". Я такого не знал и прекрасно без него обходился.
Нужно почитать и поэкспериментировать. Не разобрался ещё и не поверил ещё.
0
Эксперт .NET
 Аватар для Usaga
14307 / 9388 / 1355
Регистрация: 21.01.2016
Сообщений: 35,410
31.01.2016, 12:28
IGPIGP, я сам только недавно узнал . Как вы и сказали в посте выше, ссылок вполне достаточно, что бы комфортно работать. За почти год работы C# разработчиком ещё ни разу не поймал себя на мысли "А вот тут бы мне пригодился копирующий конструктор". В С++\CLI он больше нужен как дань традиции))
0
Комп_Оратор)
Эксперт по математике/физике
 Аватар для IGPIGP
9007 / 4708 / 630
Регистрация: 04.12.2011
Сообщений: 14,003
Записей в блоге: 16
31.01.2016, 12:44
Цитата Сообщение от Usaga Посмотреть сообщение
Как вы и сказали в посте выше, ссылок вполне достаточно
Это просто другая модель мышления. Я не вижу смысла в конструкторе копий если передача в вызове и возврат идут всё равно по ссылке. Это даже вредит. Ведь основная причина наличия такого конструктора в том чтобы обслуживать эту потребность. Тут же её не просто нет. Тут она вредна как рецидив...
Ведь по нормальной схеме механизм стека отрабатывает передачу копии ссылки. Передача копии значения не предусмотрена для ссылочных классов в автоматическом режиме. Тогда всё связанное с такими конструкторами копирования это замусоривание мозга. Есть клонирование же. Посмотрите какие глаза у людей которые ринулись из С++ в .NET с фразочкой "щас быстренько нашлёпаю ГУЙ". Результат получается неожиданный, мягко говоря. Им бедолагам и так хватает, а если ещё и это добавить, то...
Думаю C++/CLI переходит в новую фазу. А жаль.
0
Администратор
Эксперт .NET
 Аватар для tezaurismosis
9674 / 4826 / 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
Ответ Создать тему
Опции темы

Новые блоги и статьи
Переходник USB-CAN-GPIO
Eddy_Em 20.03.2026
Достаточно давно на работе возникла необходимость в переходнике CAN-USB с гальваноразвязкой, оный и был разработан. Однако, все меня терзала совесть, что аж 48-ногий МК используется так тупо: просто. . .
Оттенки серого
Argus19 18.03.2026
Оттенки серого Нашёл в интернете 3 прекрасных модуля: Модуль класса открытия диалога открытия/ сохранения файла на Win32 API; Модуль класса быстрого перекодирования цветного изображения в оттенки. . .
SDL3 для Desktop (MinGW): Рисуем цветные прямоугольники с помощью рисовальщика SDL3 на Си и C++
8Observer8 17.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-rectangles-sdl3-c. zip finish-rectangles-sdl3-cpp. zip
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие. Ссылка в Linux — это запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая ссылка» (hard link),. . .
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru