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

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

Войти
Регистрация
Восстановить пароль
 
\\max
4 / 4 / 1
Регистрация: 19.05.2012
Сообщений: 19
#1

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

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

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

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

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

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

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

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

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

9
Nixy
ComfyMobile
400 / 281 / 8
Регистрация: 24.07.2012
Сообщений: 916
20.12.2012, 23:23 #2
чот не понял вопрос, вам надо передать объект в качестве параметра в функцию чтоли?
0
\\max
4 / 4 / 1
Регистрация: 19.05.2012
Сообщений: 19
20.12.2012, 23:30  [ТС] #3
Мне нужно передать копию объекта в функцию. У меня просто получается в итоге в функции из-за конструктора копирования по-умолчанию обьект очищается деструктором, а мне необходимо работать с ним дальше, к тому же в main он тоже очищается и получается двойное очищение памяти , что приводит к ошибке.
0
Nixy
ComfyMobile
400 / 281 / 8
Регистрация: 24.07.2012
Сообщений: 916
20.12.2012, 23:35 #4
передавайте указателем, указатель самостоятельно не чистится
0
ValeryS
Модератор
6967 / 5304 / 522
Регистрация: 14.02.2011
Сообщений: 17,885
20.12.2012, 23:36 #5
Цитата Сообщение от \\max Посмотреть сообщение
получается двойное очищение памяти ,
видать с памятью в классе работаешь
0
Nixy
ComfyMobile
400 / 281 / 8
Регистрация: 24.07.2012
Сообщений: 916
20.12.2012, 23:37 #6
покажи нам код свой, мб ошибка в другом
0
\\max
4 / 4 / 1
Регистрация: 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
ValeryS
Модератор
6967 / 5304 / 522
Регистрация: 14.02.2011
Сообщений: 17,885
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
\\max
4 / 4 / 1
Регистрация: 19.05.2012
Сообщений: 19
20.12.2012, 23:49  [ТС] #9
Спасибо ValeryS это именно то о чем я спрашивал.
0
ValeryS
Модератор
6967 / 5304 / 522
Регистрация: 14.02.2011
Сообщений: 17,885
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
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
20.12.2012, 23:53
Привет! Вот еще темы с ответами:

Конструктор копирования - C++
Выводит мусорное значение в случае сохранения изменений. что не так? void Account::WithdrawMoney() { char c; Account *Jon = new...

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

Конструктор копирования - C++
Здравствуйте. Есть класс. Не могу понять как правильно написать и вызвать конструктор копирования. #include &lt;string.h&gt; #include...

Конструктор копирования - C++
Добрый вечер. Начал изучать перегрузку операций и конструктор копирования. Лазил в инете и налепил такой код. Только вот не могу понять как...


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

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

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