Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.67/6: Рейтинг темы: голосов - 6, средняя оценка - 4.67
0 / 0 / 0
Регистрация: 09.10.2018
Сообщений: 115
1

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

04.09.2019, 00:33. Показов 1124. Ответов 7
Метки нет (Все метки)

Не получается скопировать содержимое из одного массива символов в другой.Реализую класс String для работы с массивом символом для понимания.
Код:
Main
C++
1
2
3
4
5
6
String str("ава");
    int strLength = str.Length();
    str.Print();
    String str2("Бегемот");
    str2.Copy(str);
    str2.Print();
String.cpp
C++
1
2
3
4
5
6
7
String::String(const String& cpyString) : lengthStr(cpyString.lengthStr)
{
    /*Производим отладочную печать работы конструктора копирования*/
    cout << "Конструктор копирования String" << endl;
    this->str = new char[lengthStr+1];
    strcpy(str, cpyString.str);
}
Сам метод:
C++
1
2
3
4
void String::Copy(const String& str) 
{
    String cpyString(str);
}
0

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
04.09.2019, 00:33
Ответы с готовыми решениями:

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

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

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

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

7
Почетный модератор
7385 / 2629 / 281
Регистрация: 29.07.2006
Сообщений: 13,696
04.09.2019, 01:28 2
Цитата Сообщение от artur31154 Посмотреть сообщение
String cpyString(str);
Здесь создалась переменная cpyString. Потом уничтожилась при завершении функции. В этом методе нет работы с текущим объектом.
C++
1
String str2 = str1;
Вот так надо вызывать конструктор копирования.
0
С чаем беда...
Эксперт CЭксперт С++
9145 / 4664 / 1268
Регистрация: 18.10.2014
Сообщений: 10,518
04.09.2019, 01:32 3
Цитата Сообщение от artur31154 Посмотреть сообщение
Сам метод:
C++
1
2
3
4
void String::Copy(const String& str) 
{
    String cpyString(str);
}
И что по-вашему делает этот метод? Что он должен делать?
0
0 / 0 / 0
Регистрация: 09.10.2018
Сообщений: 115
04.09.2019, 01:35  [ТС] 4
Vourhey, Все равно не происходит копирование(вернее, оно происходит, но после окончания работы метода Copy выводится не скопированный массив символов

Добавлено через 50 секунд
TheCalligrapher, метод, через который один массив символов копируется в другой
0
С чаем беда...
Эксперт CЭксперт С++
9145 / 4664 / 1268
Регистрация: 18.10.2014
Сообщений: 10,518
04.09.2019, 01:46 5
Цитата Сообщение от artur31154 Посмотреть сообщение
TheCalligrapher, метод, через который один массив символов копируется в другой
В какой именно "другой"? Ваш код создает какой-то посторонний локальный cpyString, копирует данные туда, после чего сразу же уничтожает этот cpyString. И зачем же вы тогда создавали этот cpyString и копировали в него что-то?

Цитата Сообщение от artur31154 Посмотреть сообщение
но после окончания работы метода Copy выводится не скопированный массив символов
Так в тот массив, который вы выводите, ничего и не копировалось. Он как был "Бегемот", так и остался "Бегемот". Вы копировали данные в какой-то посторонний cpyString (см. выше).
0
0 / 0 / 0
Регистрация: 09.10.2018
Сообщений: 115
04.09.2019, 07:53  [ТС] 6
TheCalligrapher, Тогда как мне скопировать содержимое str в str2, используя метод Copy?
0
С чаем беда...
Эксперт CЭксперт С++
9145 / 4664 / 1268
Регистрация: 18.10.2014
Сообщений: 10,518
04.09.2019, 09:18 7
Лучший ответ Сообщение было отмечено artur31154 как решение

Решение

Цитата Сообщение от artur31154 Посмотреть сообщение
Тогда как мне скопировать содержимое str в str2, используя метод Copy?
Метод Copy не знает ничего ни про какое str2.

Метод Copy, согласно вашей задумке, должен копировать содержимое своего аргумента str в *this. То есть фактически ваш метод Copy должен обладать функциональностью копирующего оператора присваивания. Она примерно похожа на функциональность конструктора копирования, с тем только отличием, что она обязан не забыть освободить старое содержимое *this.
0
0 / 0 / 0
Регистрация: 09.10.2018
Сообщений: 115
04.09.2019, 09:22  [ТС] 8
TheCalligrapher, понял, спасиб
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
04.09.2019, 09:22

Создать класс "Вектор" и реализовать конструктор по умолчанию, конструктор копирования и деструктор
Всем доброго времени суток! нужна ваша помощь! нужно создать класс вектор и реализовать...

Конструктор копирования
Помогите пожалуйста разобраться!Правильно ли я написал конструктор копирования?Не могу понять...

Конструктор копирования
#include &lt;iostream&gt; #include &lt;cstring&gt; #include &lt;cstdlib&gt; #define SIZE 30 using namespace...

Конструктор копирования
Помогите сделать для этого конструктор копирования. class Animal { private: int n; int age;...

Конструктор копирования
Доброго времени суток! Есть маленький класс: class MyClass { private: int x = 5; ...

Конструктор копирования
Выдераю кусок кода с программы надеюсь поймете кто будет смотреть: конструктор: myclass(const...


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Опции темы

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