С Новым годом! Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.75/4: Рейтинг темы: голосов - 4, средняя оценка - 4.75
0 / 0 / 0
Регистрация: 24.12.2014
Сообщений: 5
1

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

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

Author24 — интернет-сервис помощи студентам
Вот у меня класс строка:
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
244 / 164 / 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
2784 / 1937 / 570
Регистрация: 05.06.2014
Сообщений: 5,602
13.05.2015, 19:42 3
Что-то с памятью моей стало... strcpy разве переваривает NULL в качестве аргумента? Попробуйте написать что-то в духе:
C++
1
2
3
4
strg::strg():str(new char[1]),len(0)
{
    *str=0;
}
0
13.05.2015, 19:42
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
Copyright ©2000 - 2024, CyberForum.ru