Форум программистов, компьютерный форум CyberForum.ru

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 11, средняя оценка - 4.91
Merovingian
54 / 54 / 5
Регистрация: 24.09.2011
Сообщений: 149
#1

Конструктор копирования - C++

18.02.2012, 15:41. Просмотров 1455. Ответов 12
Метки нет (Все метки)

Может быть глупый вопрос, а может я глупый...

Конструктор копирования имеет такой синтаксис

имякласса(const имякласса &){
тело конструктора
}

Почему параметр передается по ссылке?

Стал искать, нашел такую весчь:
Инициализация происходит в 3х случаях:
1) Один объект инициализирует другой
2) когда объект - параметр и передается по значению
3) когда объект возвращает функция.

Тогда я так понимаю мы просто не сможем передать параметр конструктору по значению потому, что произойдет ИНИЦИАЛИЗАЦИЯ и снова будет вызван конструктор копирования. итд.

Это правильно или не совсем, в гугле не нашел толкового объяснения в Шилдте об этом не написано
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
18.02.2012, 15:41     Конструктор копирования
Посмотрите здесь:

Конструктор копирования - C++
Здраствуйте! Ниже приведено 2 исходника. Подскажите, пожалуйста, в котором из них нужно вставить конструктор копирования, или может быть в...

конструктор копирования - C++
не могу понять, почему не срабатывает конструктор копирования. #include <iostream> using namespace std; class Shape { ...

Конструктор копирования. - C++
struct list { m_class *data; list *Next; list *Prev; }; class Lst {

Конструктор копирования - C++
Ребята!! Вроде все получается, да только вот сделала конструктор копирования (А он мне, правда, нужен!) - и бух! программа ругается на...

Конструктор копирования в c++ - C++
Добрый день, такая задача по с++ Какая ошибка в следующей реализации конструктора копирования по умолчанию и деструктора?? Какой еще...

Конструктор копирования - C++
class alpha { public: alpha(alpha& a) { //код } }; Подскажите, почему компилятор ругается если я пытаюсь передать...

Конструктор копирования. - C++
Нужно для задачи дописать конструктор копирования. Вся задача в условии почти решена. Собственно вот условие и как она должна выглядеть: ...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
dimcoder
Полярный
458 / 431 / 67
Регистрация: 11.09.2011
Сообщений: 1,129
18.02.2012, 16:08     Конструктор копирования #2
Цитата Сообщение от Merovingian Посмотреть сообщение
Почему параметр передается по ссылке?
Потому-что передавать по значению - копировать весь объект (может много весить), а тут просто принимаем ссылку (которая весит определенно меньше самого объекта) на объект. Ресурсы короче экономим + быстрее.
Jupiter
Каратель
Эксперт С++
6553 / 3973 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
18.02.2012, 16:10     Конструктор копирования #3
Цитата Сообщение от Merovingian Посмотреть сообщение
Тогда я так понимаю мы просто не сможем передать параметр конструктору по значению потому, что произойдет ИНИЦИАЛИЗАЦИЯ и снова будет вызван конструктор копирования. итд.
именно так

Цитата Сообщение от Merovingian Посмотреть сообщение
Конструктор копирования имеет такой синтаксис
Цитата Сообщение от Merovingian Посмотреть сообщение
имякласса(const имякласса &)
это всего лишь одна из возможных сигнатур конструктора копирования, помимо ссылки на константу допустимы
C++
1
2
3
class_name(class_name &)
class_name(volatile class_name &)
class_name(const volatile class_name &)
Konstantin_D
14 / 14 / 2
Регистрация: 21.07.2011
Сообщений: 89
18.02.2012, 16:22     Конструктор копирования #4
См. Страуструп "Язык программирования С++. Специальное издание. 2001 г" стр 319, глава 11.3.4.
Передача по значению вызовет бесконечную рекурсию. Конструктор копирования имеет такой синтаксис.
HardMorg
3 / 26 / 3
Регистрация: 29.08.2010
Сообщений: 204
18.02.2012, 17:24     Конструктор копирования #5
Цитата Сообщение от Konstantin_D Посмотреть сообщение
См. Страуструп "Язык программирования С++. Специальное издание. 2001 г" стр 319, глава 11.3.4.
Передача по значению вызовет бесконечную рекурсию. Конструктор копирования имеет такой синтаксис.
Обьясни почему будет рекурсия, если так подумать вызываем копирующий конструктор передаем по значению копируем в стек передающийся обьект, почему происходит рекурсия?
Toshkarik
1140 / 857 / 51
Регистрация: 03.08.2011
Сообщений: 2,384
Завершенные тесты: 1
18.02.2012, 17:30     Конструктор копирования #6
Потому что когда передается по значению то создается временный объект, в котором тоже запускается конструктор копирования, в котором опять создается временный объект и тд.
Konstantin_D
14 / 14 / 2
Регистрация: 21.07.2011
Сообщений: 89
18.02.2012, 17:34     Конструктор копирования #7
Для передачи аргумента конструктору копирования по значению вызывается конструктор копирования и т.д.
HardMorg
3 / 26 / 3
Регистрация: 29.08.2010
Сообщений: 204
18.02.2012, 21:12     Конструктор копирования #8
Цитата Сообщение от Toshkarik Посмотреть сообщение
Потому что когда передается по значению то создается временный объект, в котором тоже запускается конструктор копирования, в котором опять создается временный объект и тд.
правильно в стеке создается копия обьекта которого передаем, но я не пойму почему вызывается еще конструктор копирования там
Jupiter
Каратель
Эксперт С++
6553 / 3973 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
18.02.2012, 21:15     Конструктор копирования #9
Цитата Сообщение от HardMorg Посмотреть сообщение
но я не пойму почему вызывается еще конструктор копирования там
сам же пишешь
Цитата Сообщение от HardMorg Посмотреть сообщение
в стеке создается копия обьекта которого передаем
HardMorg
3 / 26 / 3
Регистрация: 29.08.2010
Сообщений: 204
18.02.2012, 22:08     Конструктор копирования #10
Цитата Сообщение от Jupiter Посмотреть сообщение
сам же пишешь
аааа та да))) понял... получается что вызываем конструктор копирования, получается тот в свою очередь копирует и тд ..
silent_1991
Эксперт С++
4960 / 3036 / 149
Регистрация: 11.11.2009
Сообщений: 7,027
Завершенные тесты: 1
18.02.2012, 22:19     Конструктор копирования #11
Цитата Сообщение от HardMorg Посмотреть сообщение
копирует
Не, не успевает. Мы даже в тело КК не попадём, он будет постоянной вызываться в своём же параметре.
HardMorg
3 / 26 / 3
Регистрация: 29.08.2010
Сообщений: 204
19.02.2012, 00:24     Конструктор копирования #12
Цитата Сообщение от silent_1991 Посмотреть сообщение
Не, не успевает. Мы даже в тело КК не попадём, он будет постоянной вызываться в своём же параметре.
а можете как то изобразить или что то в этом роде, я то понял но не понял
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
19.02.2012, 00:42     Конструктор копирования
Еще ссылки по теме:

Конструктор копирования - C++
Ответьте пожалуйста какой необходим конструктор копирования для объекта класса который передается в функцию?

Конструктор копирования - C++
#include <iostream> using namespace std; class test { public: int x; test(int num); test(const...

Конструктор копирования - C++
Привет Подскажите пожалуйста, как правильно сделать конструктор копирования. Заголовки: class String { public: char *Data; ...

Конструктор копирования - C++
Помогите пожалуйста разобраться!Правильно ли я написал конструктор копирования?Не могу понять почему не срабатывает метод show() для...

Конструктор копирования - C++
Конструктор копирования в качестве параметра принимает ссылку на экземпляр типа класса. Вопрос заключается, почему именно...


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

Или воспользуйтесь поиском по форуму:
DU
1481 / 1057 / 45
Регистрация: 05.12.2011
Сообщений: 2,279
19.02.2012, 00:42     Конструктор копирования #13
когда в функцию передается аргумент по значению, а не по ссылке, он копируется.
чтобы аргумент скопировался, для него должен позваться конструктор копирования.
если конструктор копирования будет принимать аргумент не по ссылке а по значению, компилятор должен будет сгенерить код, который должен скопировать этот аргумент с помощью того же конструктора копирования. чтобы вызвался конструктор копирования, аргумент в него должен скопироваться с помощью конструктора копирования. чтобы этот второй конструктор копирования вызвался, в него нужно скопировать аргумент с помощью конструктора копирования ну и так. далее.
Yandex
Объявления
19.02.2012, 00:42     Конструктор копирования
Ответ Создать тему
Опции темы

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