4 / 4 / 0
Регистрация: 19.05.2012
Сообщений: 19
1

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

20.12.2012, 23:14. Показов 564. Ответов 9
Метки нет (Все метки)

Ответьте пожалуйста какой необходим конструктор копирования для объекта класса который передается в функцию?
__________________
Помощь в написании контрольных, курсовых и дипломных работ здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
20.12.2012, 23:14
Ответы с готовыми решениями:

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

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

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

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

9
ComfyMobile
400 / 281 / 34
Регистрация: 24.07.2012
Сообщений: 916
20.12.2012, 23:23 2
чот не понял вопрос, вам надо передать объект в качестве параметра в функцию чтоли?
0
4 / 4 / 0
Регистрация: 19.05.2012
Сообщений: 19
20.12.2012, 23:30  [ТС] 3
Мне нужно передать копию объекта в функцию. У меня просто получается в итоге в функции из-за конструктора копирования по-умолчанию обьект очищается деструктором, а мне необходимо работать с ним дальше, к тому же в main он тоже очищается и получается двойное очищение памяти , что приводит к ошибке.
0
ComfyMobile
400 / 281 / 34
Регистрация: 24.07.2012
Сообщений: 916
20.12.2012, 23:35 4
передавайте указателем, указатель самостоятельно не чистится
0
Модератор
Эксперт по электронике
8519 / 6333 / 859
Регистрация: 14.02.2011
Сообщений: 22,027
20.12.2012, 23:36 5
Цитата Сообщение от \\max Посмотреть сообщение
получается двойное очищение памяти ,
видать с памятью в классе работаешь
0
ComfyMobile
400 / 281 / 34
Регистрация: 24.07.2012
Сообщений: 916
20.12.2012, 23:37 6
покажи нам код свой, мб ошибка в другом
0
4 / 4 / 0
Регистрация: 19.05.2012
Сообщений: 19
20.12.2012, 23:43  [ТС] 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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
#include <iostream>
#include <conio.h>
 
using namespace std;
 
 
class a
{
    int size;
    int *A;
public:
    a(int n)
    {
        size = n;
        A = new int [size];
        cout << "Enter elements" << endl;
        for (int i = 0; i < size; i++)
        {
            cin >> A[i];
        }
    }
    ~a(){ delete[] A;}
    void output();
    friend long int *operator+ ( a, a );
    friend a operator+ ( int , a );
};
 
 
 
 
void a::output()
{
    for(int i = 0; i < size; i++)
    cout << endl << A[i] << endl;
}
 
void output(long int * A,int n)
{
    cout << endl;
    for(int i = 0 ; i < n; i++) cout << A[i] << endl;
}
long int * operator + (a A,a B)
{
    long int *C = new long int [A.size];
    for(int i = 0; i < A.size ; i++ )
    {
        C[i] = A.A[i] + B.A[i];
    }
    output(C,A.size);
    return C;
 
}
 
a operator+ (int k, a A)
{
    for(int i = 0; i < A.size; i++)
    {
        A.A[i] = A.A[i] + k;
    }
    return A;
}
 
int main()
{
    int m = 0;
    cout << "Enter size of array "<< endl;
    cin >> m;
    
    a A(m);
    cout << "Array A:" << endl;
    
    A.output();
    
    a B(m);
    cout << "Array B:" << endl;
    
    B.output();
    
    operator+ ( A, B );
 
    A = operator+ ( 5, A );
 
    A.output();
 
    _getch();
    return 0;
}
Вполне возможно, я с кодом уже много нашаманил и мог завтыкать не раз.
0
Модератор
Эксперт по электронике
8519 / 6333 / 859
Регистрация: 14.02.2011
Сообщений: 22,027
20.12.2012, 23:46 8
возьмем класс
C++
1
2
3
4
5
6
7
class A
{
 int* lpbuf;
 public:
 A(){ lpbuf=new int[10];};
 ~A() { delete[] lpbuf;};
}
если этот класс скопировать то конструктор копирования по умолчанию скопирует указатель
т.е в классе копии он будет указывать туда же куда и оригинал, и при разрушении копии с оригиналом не возможно работать
здесь нужно переопределить конструктор копирования
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
class A
{
 int* lpbuf;
 public:
 A(){ lpbuf=new int[10];};
//вот он конструктор копирования
 A( A*a){ 
  lpbuf=new int[10]; // выделяем новую память
  memcpy(lpbuf,a->lpbuf,sizeof(int)*10);// копируем из оригинала содержимое памяти
// необходимо скопировать и другие члены(если они есть) поскольку
// конструктора копирования по умолчанию больше не существует
 
};
 
 
 ~A() { delete[] lpbuf;};
}
1
4 / 4 / 0
Регистрация: 19.05.2012
Сообщений: 19
20.12.2012, 23:49  [ТС] 9
Спасибо ValeryS это именно то о чем я спрашивал.
0
Модератор
Эксперт по электронике
8519 / 6333 / 859
Регистрация: 14.02.2011
Сообщений: 22,027
20.12.2012, 23:53 10
пардон наврал
вот как должен выглядеть конструктор копирования
C++
1
2
3
4
5
6
7
A( A &a){ 
  lpbuf=new int[10]; // выделяем новую память
  memcpy(lpbuf,a.lpbuf,sizeof(int)*10);// копируем из оригинала содержимое памяти
// необходимо скопировать и другие члены(если они есть) поскольку
// конструктора копирования по умолчанию больше не существует
 
};
вот здесь подробнее описано
http://ru.wikipedia.org/wiki/К... опирования
1
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
20.12.2012, 23:53

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

Конструктор копирования
class alpha { public: alpha(alpha&amp; a) { //код } }; Подскажите, почему компилятор...

конструктор копирования
Доброго времени суток. Помогите пожалуйста. Мне нужно вызвать конструктор копирования в этой...

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


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

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

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