|
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
|
|
| 16.05.2020, 06:07 | |
|
Ответы с готовыми решениями:
2
Объясните, зачем в коде нужен явный конструктор копирования Конструктор класса, конструктор копирования запускается не тот который нужен
|
|
Мозгоправ
|
||
| 16.05.2020, 07:01 | ||
|
ShoOstiZ, во-первых, вы сделали ожибку в конструкторе копирования. Поэтому формально ваши утверждения
![]() (Я уже не говорю про члены класса, которые не инициализируются ни в первом, ни во втором конструкторе. )Но, допустим, вы нашли и исправили эту ошибку, и конструктор копирования работает правильно. Тогда a и b будут одинаковыми. Но с чего вы решили, что a и c одинаковые? В a выделена память на 15 чисел, в c - на 42. Да и числа там, судя по rand(), разные. Конструктор копировани вызывается в куче разных случаев. В частности, при передаче объекта в функцию по значению, или при возврате объекта из функции. Я вам рекомендую почитать статью Правило трёх, написать в соответствии с ней некий класс, у которого каждый метод из этих трёх будет выводить на консоль своё сообщение-метку, и поиграться с этим классом: инициализация, присваивание, копирование, передача и возврат из функции разными способами и т.п. И тщательно проанализировать лог сообщений в консоли: откуда какое сообщение было выдано. А потом дописать класс до "правила пяти" и тоже проанализировать лог. Очень способствует пониманию того, что и как работает. Если это вам, конечно, нужно.
0
|
||
|
Вездепух
12933 / 6801 / 1820
Регистрация: 18.10.2014
Сообщений: 17,213
|
||||
| 16.05.2020, 07:33 | ||||
|
0
|
||||
| 16.05.2020, 07:33 | |
|
Помогаю со студенческими работами здесь
3
Зачем нужен конструктор переноса? Зачем нужен конструктор объекта ostringstream (строковый поток который) с двумя аргументами? Не могу сделать чтобы класс содержал основной конструктор и конструктор копирования Не могу правильно сделать конструктор и конструктор копирования и принадлежность точки с заданными координатами треугольнику Конструктор инициализации, конструктор копирования, деструктор Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Воспроизведение звукового файла с помощью 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 полиномов. . .
|