Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Maxvell_2010
1 / 1 / 0
Регистрация: 19.05.2013
Сообщений: 23
#1

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

29.05.2014, 14:56. Просмотров 247. Ответов 7
Метки нет (Все метки)

есть класс, в нем есть указать на участок памяти, как написать для этого класс конструктор копирования? как работает конструктор с указателями?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
29.05.2014, 14:56
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Конструктор копирования (C++):

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

Не могу правильно сделать конструктор и конструктор копирования и принадлежность точки с заданными координатами треугольнику - C++
#include "stdafx.h" #include <iostream> #include <conio.h> #include <windows.h> #include <math.h> #include <algorithm> using...

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

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

конструктор копирования - C++
Помогите вывести конструктор копирования #include <iostream> //библиотека C++, позволяющая использовать систему ввода-вывода C++ ...

Конструктор копирования - C++
Подскажите пожалуйста в моём случае конструктор копирования правильно реализован? class Massiv { private: float *a; ...

7
dzrkot
zzzZZZ...
522 / 352 / 53
Регистрация: 11.09.2013
Сообщений: 2,022
29.05.2014, 15:10 #2
Цитата Сообщение от Maxvell_2010 Посмотреть сообщение
в нем есть указать на участок памяти
вероятно что выделить память в конструкторе копирования и скопировать содержимое из копируемого объекта
0
Maxvell_2010
1 / 1 / 0
Регистрация: 19.05.2013
Сообщений: 23
29.05.2014, 15:23  [ТС] #3
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
    #include <iostream>
    using namespace std;
 
    class A
    {  
    int *a;
    
    public:
 
    A()
    {
        a=new int[5];
            *a=0;
    }
    
    A(const A &obj)
    {      
        *a=*(obj.a);
    }
    
    };
    
 
    int main()
    {
    A obj;
    A obj1(obj); 
    A obj2 = obj1;
    return 0;
    }
ошибка вы/деления памяти, но не могу понять почему
0
alsav22
5426 / 4821 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
29.05.2014, 15:26 #4
Написали же:
Цитата Сообщение от dzrkot Посмотреть сообщение
выделить память в конструкторе копирования
0
Ilot
Модератор
Эксперт С++
1823 / 1181 / 232
Регистрация: 16.05.2013
Сообщений: 3,118
Записей в блоге: 5
Завершенные тесты: 1
29.05.2014, 15:36 #5
Цитата Сообщение от Maxvell_2010 Посмотреть сообщение
ошибка вы/деления памяти, но не могу понять почему
Забыли в конструкторе копий выделить память.
C++
1
2
3
4
5
    A(const A &obj)
    {
      a=new int[5];
        *a=*(obj.a);
    }
Сразу оговорюсь у вас очень плохое решение, сказать точнее не правильное.

Добавлено через 8 минут
Что бы не бояться утечки памяти можно сделать так:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <iostream>
#include <memory>
 
class A {
    std::shared_ptr<int> a;
public:
    A(): a(new int)
    { *a = 0; }
    A(const A &obj): a(new int)  {
        *a = *obj.a;
    }
};
 
int main() {
    A obj;
    A obj1(obj);
    A obj2 = obj1;
    return 0;
}
0
dzrkot
zzzZZZ...
522 / 352 / 53
Регистрация: 11.09.2013
Сообщений: 2,022
29.05.2014, 15:40 #6
ну вообщем да всё уже сказали. У вас есть указатель, но в конструкторе по-усолчанию вы выделяете под него память, а в конст копирования вы пытаетесь в разыменованый указатель записать значение, хотя памяти у него нет
0
Maxvell_2010
1 / 1 / 0
Регистрация: 19.05.2013
Сообщений: 23
29.05.2014, 17:17  [ТС] #7
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
    #include <iostream>
    using namespace std;
 
    class A
    {  
    int *a;
    
    public:
 
    A()
    {
        a=new int[5];
            *a=0;
    }
    
    A(const A &obj)
    {   
        a =new int [10] ;   
        *a=*obj.a;
    }
    
    };
    
 
    int main()
    {
    A obj;
    A obj1(obj); 
    A obj2 = obj1;
    return 0;
    }
всем спасибо, сделал так
0
dzrkot
29.05.2014, 17:18     Конструктор копирования
  #8

Не по теме:

Цитата Сообщение от Maxvell_2010 Посмотреть сообщение
всем спасибо, сделал так
тут принято под полезным сообщением ставить +1спасибо

0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
29.05.2014, 17:18
Привет! Вот еще темы с ответами:

Конструктор копирования. - C++
Нужно для задачи дописать конструктор копирования. Вся задача в условии почти решена. Собственно вот условие и как она должна выглядеть: ...

Конструктор копирования - C++
Есть вопрос. Как объект одного класса передать в объект другого класса?

Конструктор копирования - C++
Привет Подскажите пожалуйста, как правильно сделать конструктор копирования. Заголовки: class String { public: char *Data; ...

Конструктор копирования - C++
Конструктор копирования в качестве параметра принимает ссылку на экземпляр типа класса. Вопрос заключается, почему именно...


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

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

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