Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.57/7: Рейтинг темы: голосов - 7, средняя оценка - 4.57
0 / 0 / 0
Регистрация: 05.05.2020
Сообщений: 16

Зачем нужен конструктор копирования?

16.05.2020, 06:07. Показов 1594. Ответов 2
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем привет. Тут проблема я не понимаю зачем нужен конструктор копирования. Ну точнее я понимаю, зачем он, но если можно просто для второго такого же обьекта использовать этот же конструктор например:
#include <iostream>
#include <ctime>
#include <string>
using namespace std;
class start {
private:
int x;
int y;
int* data;
int size;
public:
void print() {
cout << x << endl;
cout << y << endl;
}
start(int size) {
cout << "Вывелся конструктор " << this << endl;
this->size = size;
this->data = new int[size];
for (int i = 0; i < size; i++) {
this->data[i] = rand() % 25;
}


}
start(const start &other) {
cout << "Вывелся конструктор копирования " << this << endl;
this->data = new int[other.size];
for (int i = 0; i < other.size; i++) {
this->data[i] = other.data[i];
}
}
~start() {
cout << "Вывелся деструктор" << endl;
delete[]this->data;
}

};

int main() {
setlocale(LC_ALL, "Rus");
start a(15);
start b(a);
start c(42);


return 0;
}
Тут я показал, что обьекты: а и b созданы через копирование, одинаковые. А обьеты: a и c созданы по одному конструктору, и также одинаковые.Обьясните почему так и зачем?
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
16.05.2020, 06:07
Ответы с готовыми решениями:

Объясните, зачем в коде нужен явный конструктор копирования
Добрый день, хочу понять код, почему тут обезательно надо явный конструктор копирования? #include &lt;iostream&gt; using...

Конструктор класса, конструктор копирования запускается не тот который нужен
Есть такой конструктор: Neuron::Neuron(int iType_activation_funk) { this-&gt;iType_act = iType_activation_funk; switch...

Зачем нужен конструктор?
Всем доброго дня. Ребят такая проблема объясните мне на пальцах для чего нужен конструктор в классах. Я уже столько толмудов перерыл но...

2
Мозгоправ
 Аватар для L0M
1745 / 1039 / 468
Регистрация: 01.10.2018
Сообщений: 2,138
Записей в блоге: 2
16.05.2020, 07:01
ShoOstiZ, во-первых, вы сделали ожибку в конструкторе копирования. Поэтому формально ваши утверждения
Цитата Сообщение от ShoOstiZ Посмотреть сообщение
Тут я показал, что обьекты: а и b созданы через копирование, одинаковые. А обьеты: a и c созданы по одному конструктору, и также одинаковые.
не соответствую действительности: все три объекта получились разными.

(Я уже не говорю про члены класса, которые не инициализируются ни в первом, ни во втором конструкторе. )

Но, допустим, вы нашли и исправили эту ошибку, и конструктор копирования работает правильно. Тогда a и b будут одинаковыми. Но с чего вы решили, что a и c одинаковые? В a выделена память на 15 чисел, в c - на 42. Да и числа там, судя по rand(), разные.

Конструктор копировани вызывается в куче разных случаев. В частности, при передаче объекта в функцию по значению, или при возврате объекта из функции.

Я вам рекомендую почитать статью Правило трёх, написать в соответствии с ней некий класс, у которого каждый метод из этих трёх будет выводить на консоль своё сообщение-метку, и поиграться с этим классом: инициализация, присваивание, копирование, передача и возврат из функции разными способами и т.п. И тщательно проанализировать лог сообщений в консоли: откуда какое сообщение было выдано. А потом дописать класс до "правила пяти" и тоже проанализировать лог. Очень способствует пониманию того, что и как работает. Если это вам, конечно, нужно.
0
Вездепух
Эксперт CЭксперт С++
 Аватар для TheCalligrapher
12933 / 6801 / 1820
Регистрация: 18.10.2014
Сообщений: 17,213
16.05.2020, 07:33
Цитата Сообщение от ShoOstiZ Посмотреть сообщение
Всем привет.
https://www.cyberforum.ru/blog... g4022.html

Цитата Сообщение от ShoOstiZ Посмотреть сообщение
А обьеты: a и c созданы по одному конструктору, и также одинаковые.
Вы о чем? Какие же они "одинаковые", если один имеет размер 15, а другой 42??? И даже если бы они имели одинаковые размеры, содержимое массивов в них все равно было бы разным.

Цитата Сообщение от ShoOstiZ Посмотреть сообщение
а и b созданы через копирование, одинаковые.
А вот эти у вас действительно одинаковые. Вот для этого и нужен конструктор копирования.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
16.05.2020, 07:33
Помогаю со студенческими работами здесь

Зачем нужен конструктор переноса?
Зачем нужен конструктор переноса если тоже самое можно реализовать в обычном конструкторе копирования. Ну вот пример: ...

Зачем нужен конструктор объекта ostringstream (строковый поток который) с двумя аргументами?
От него всё равно толку как от быка молока. А вроде как предназначен для записи чего-то там в строку... #include &lt;string&gt; ...

Не могу сделать чтобы класс содержал основной конструктор и конструктор копирования
Разработать класс ThreeAngle для работы с плоскими треугольниками. В качестве членов-данных задаются длины трех сторон треугольника. Класс...

Не могу правильно сделать конструктор и конструктор копирования и принадлежность точки с заданными координатами треугольнику
#include &quot;stdafx.h&quot; #include &lt;iostream&gt; #include &lt;conio.h&gt; #include &lt;windows.h&gt; #include &lt;math.h&gt; #include &lt;algorithm&gt; using...

Конструктор инициализации, конструктор копирования, деструктор
Я сделал почти задание по перегрузке операторов. Осталось одно, тоесть три: конструктор инициализации, конструктор копирования, деструктор....


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Новые блоги и статьи
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
Установка Android SDK, NDK, JDK, CMake и т.д.
8Observer8 25.01.2026
Содержание блога Перейдите по ссылке: https:/ / developer. android. com/ studio и в самом низу страницы кликните по архиву "commandlinetools-win-xxxxxx_latest. zip" Извлеките архив и вы увидите. . .
Вывод текста со шрифтом TTF на Android с помощью библиотеки SDL3_ttf
8Observer8 25.01.2026
Содержание блога Если у вас не установлены Android SDK, NDK, JDK, и т. д. то сделайте это по следующей инструкции: Установка Android SDK, NDK, JDK, CMake и т. д. Сборка примера Скачайте. . .
Использование SDL3-callbacks вместо функции main() на Android, Desktop и WebAssembly
8Observer8 24.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
моя боль
iceja 24.01.2026
Выложила интерполяцию кубическими сплайнами www. iceja. net REST сервисы временно не работают, только через Web. Написала за 56 рабочих часов этот сайт с нуля. При помощи perplexity. ai PRO , при. . .
Модель сукцессии микоризы
anaschu 24.01.2026
Решили писать научную статью с неким РОманом
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru