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

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

30.01.2016, 15:30. Показов 2860. Ответов 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
14314 / 9400 / 1355
Регистрация: 21.01.2016
Сообщений: 35,450
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
14314 / 9400 / 1355
Регистрация: 21.01.2016
Сообщений: 35,450
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
14314 / 9400 / 1355
Регистрация: 21.01.2016
Сообщений: 35,450
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
14314 / 9400 / 1355
Регистрация: 21.01.2016
Сообщений: 35,450
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
Ответ Создать тему
Новые блоги и статьи
Оптимизация кода на разграничение прав доступа к элементам формы
Maks 13.04.2026
Алгоритм из решения ниже реализован на нетиповом документе, разработанного в конфигурации КА2. Задачи, как таковой, поставлено не было, проделанное ниже исключительно моя инициатива. Было так:. . .
Контроль заполнения и очистка дат в зависимости от значения перечислений
Maks 12.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: реализовать контроль корректности заполнения дат назначения. . .
Архитектура слоя интернета для сервера-слоя.
Hrethgir 11.04.2026
В продолжение https:/ / www. cyberforum. ru/ blogs/ 223907/ 10860. html Знаешь что я подумал? Раз мы все источники пишем в голове ветки, то ничего не мешает добавить в голову такой источник, который сам. . .
Подстановка значения реквизита справочника в табличную часть документа
Maks 10.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: при выборе сотрудника (справочник Сотрудники) в ТЧ документа. . .
Очистка реквизитов документа при копировании
Maks 09.04.2026
Алгоритм из решения ниже применим как для типовых, так и для нетиповых документов на самых различных конфигурациях. Задача: при копировании документа очищать определенные реквизиты и табличную. . .
модель ЗдравоСохранения 8. Подготовка к разному выполнению заданий
anaschu 08.04.2026
https:/ / github. com/ shumilovas/ med2. git main ветка * содержимое блока дэлэй из старой модели теперь внутри зайца новой модели 8ATzM_2aurI
Блокировка документа от изменений, если он открыт у другого пользователя
Maks 08.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в конфигурации КА2. Задача: запретить редактирование документа, если он открыт у другого пользователя. / / . . .
Система безопасности+живучести для сервера-слоя интернета (сети). Двойная привязка.
Hrethgir 08.04.2026
Далее были размышления о системе безопасности. Сообщения с наклонным текстом - мои. А как нам будет можно проверить, что ссылка наша, а не подделана хулиганами, которая выбросит на другую ветку и. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru