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

Cделать конструктор по умолчанию и копирования для класса

13.05.2015, 19:32. Просмотров 517. Ответов 2
Метки нет (Все метки)

Вот у меня класс строка:
C++
1
2
3
4
5
6
7
class strg  {
    char *str;
    int len;
public:
    strg();
    strg(const strg &); 
};
реализация:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
strg::strg()
{ 
    str = NULL;
    len = 0;
}
 
strg::strg(const strg &copy)
{ 
    cout << "Konstructor copy: ";
    len = copy.len;
    str = new char[len + 1];
    strcpy(str, copy.str);
}
А вот второй класс:
C++
1
2
3
4
5
6
7
8
class element
{
    strg str;
    element *next;
public:
    element();
    element(const element &);
};
Как мне сделать конструктор по умолчанию и копирования для класса element.
я вот так написал:
C++
1
2
3
4
5
6
7
8
9
10
11
12
element::element()
{
    str;
    next = NULL;
}
 
element::element(const element &copy)
{
    cout << "Konstructor copy: ";
    next = copy.next;
    str = copy.str;
}
Но после запуска программы, при вызове конструктора копирования вылетает ошибка доступа к участку памяти.
Помогите пожалуйста, а то из за этого не могу дальше создавать односвязный список.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
13.05.2015, 19:32
Ответы с готовыми решениями:

Конструктор копирования для шаблонного класса
Не могу написать конструктор копирования для следующего класса: template &lt;typename T, typename A =...

Конструктор копирования для класса стек
Почему не хочет работать конструктор копирования? struct Item { int value; Item *next;...

Для класса не существует конструктор по умолчанию
Ошибка (активно) E0291 для класса &quot;Apteka&quot; не существует конструктор по умолчанию Хотел посмотреть...

Конструктор копирования для динамического объекта класса приемника
class first_class { public: first_class(int q) { m_q=q; cout&lt;&lt;&quot;First class say...

2
243 / 163 / 133
Регистрация: 30.09.2012
Сообщений: 690
13.05.2015, 19:39 2
C++
1
2
3
4
5
6
element::element(const element &copy)
{
cout << "Konstructor copy: ";
next = copy.next;
str = copy.str; // У вас здесь вызов операции присваивания, а не копирования строки, как в конструкторе копирования
}
Перегрузите в вашем классе "строка" операцию присваивания =.
Она будет похожа на конструктор копирования, но необходимо будет также сделать проверку на присваивание элемента самому себе.

И перед присваиванием, я предполагаю, надо будет освободить память строки, в которую присваиваем, и выделить заново под новую строку
0
2683 / 1855 / 552
Регистрация: 05.06.2014
Сообщений: 5,347
13.05.2015, 19:42 3
Что-то с памятью моей стало... strcpy разве переваривает NULL в качестве аргумента? Попробуйте написать что-то в духе:
C++
1
2
3
4
strg::strg():str(new char[1]),len(0)
{
    *str=0;
}
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
13.05.2015, 19:42

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Конструктор копирования для класса с указателем на абстрактный класс
Всем привет. Как реализовать конструктор копирования для класса Foo? class Base { public: ...

Конструктор копирования по умолчанию
class A { public int a; public int b; /// ... public int...

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

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


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

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

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