Форум программистов, компьютерный форум CyberForum.ru

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

Войти
Регистрация
Восстановить пароль
 
ТОрчОК
Заблокирован
#1

криво работает коеструктор копии производного класса - C++

29.03.2013, 13:34. Просмотров 257. Ответов 4
Метки нет (Все метки)

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
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
#include <iostream>
using namespace std;
#include <conio.h>
class building
{
protected:
    int **A, level, flat;
public:
    building(){};
    building(int l, int f);
    building(const building &ob);
    ~building();
    void show();
    void function(int m,int n);
    int get(int &i,int &j);
};
class B:public building
{
    int *p;
    int a,b,c;
public:
    B(){};
    B(int a1,int b1,int c1);
    ~B();
    B(const B &ob);
    void show1(building ob);
    int get1(int i);
};
building::building(int l, int f)
{
function(l,f);
}
building::building(const building &ob)
{
    function(ob.level,ob.flat);
    for(int i=0;i<ob.level;i++)
    {
        for(int j=0;j<ob.flat;j++)
        {
            A[i][j]=ob.A[i][j];
        }
    }
}
building::~building()
{
    for(int i=0;i<level;i++)
    {
        delete []A[i];
    }
    delete []A;
}
void building::show()
{
    int k=0;
    for(int i=0;i<level;i++)
    {
        cout<<"этаж №"<<i+1<<" ";
        cout<<endl;
        for(int j=0;j<flat;j++)
        {
            k++;
            A[i][j]=rand()%36+64;
            cout<<"квартира №"<<k<<": ";
            cout<<"площадь"<<"-";
            cout<<A[i][j]<<" кв.м";
            cout<<endl;
        }
        cout<<endl;
    }
}
void building::function(int m,int n)
{
    A=new int*[m];
    for(int i=0;i<m;i++)
    {
        for(int j=0;j<n;j++)
        {
        A[i]=new int[n];
        }
    }
    level=m;
    flat=n;
}
int building::get(int &i,int &j)
{
    return A[i][j];
}
B::B(int a1,int b1,int c1):building(a1,b1)
{
    a=a1;
    b=b1;
    p=new int [c1];
    c=c1;
}
B::B(const B &ob)
{
    c=ob.c;
    p=new int [ob.c];
    for(int i=0;i<ob.c;i++)
    {
        p[i]=ob.p[i];
    }
}
B::~B()
{
    delete []p;
}
void B::show1(building ob)
{
    int k=0;
        for(int i=0;i<a;i++)
        {
            for(int j=0;j<b;j++)
            {
                p[k]=ob.get(i,j);
                cout<<"число комнат на "<<i+1<<" этаже "<<"в "<<k+1<<" квартире - ";
                cout<<p[k]/15<<" ";
                cout<<endl;
                k++;
            }
            
        }
}
    int B::get1(int i)
    {
        return p[i];
    }
int main()
{
    setlocale(LC_ALL,"rus");
    int x,y;
    cout<<"Введите число этажей=";
    cin>>x;
    cout<<"Введите число квартир на этаж=";
    cin>>y;
    building b(x,y);
    building d=b; //подобная инструкция для B e=a работает криво.
    B a(x,y,x*y);
    b.show();
    a.show1(b);
    d.show();
    a.show1(d);
    getch();
}
когда пытаюсь присвоить объект произ. класса др. объекту создается копия (по крайней мере вызывается конструктор копий), но вместо вывода того что нужно вылетает с вот этим вот _ASSERTE(_BLOCK_TYPE_IS_VALID(pHead->nBlockUse));
что не так?

Добавлено через 40 минут
может и не конструктор, но память все равно где-то крошится. в чем может быть причина.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
29.03.2013, 13:34     криво работает коеструктор копии производного класса
Посмотрите здесь:

Инициализация конструкторов производного класса C++
Доступ к методам производного класса C++
Передать параметр конустркутору производного класса C++
C++ Вызов методов производного класса
C++ Предобъявление производного класса
C++ Ошибка в функции производного класса
Перегрузка operator>> для производного класса C++
Конструктор производного класса C++
C++ Тип производного класса
Передача типа из производного класса в родительский C++
как сделать чтобы объект производного класса сам себя добавлял в список или массив указателей базового класса? C++
C++ Передача массива в конструктор производного класса

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Tulosba
:)
Эксперт С++
4384 / 3227 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
29.03.2013, 15:05     криво работает коеструктор копии производного класса #2
Копирующий конструктор дочернего класса надо объявить так:
C++
1
B::B(const B &ob) : building(ob)
ТОрчОК
Заблокирован
30.03.2013, 14:37  [ТС]     криво работает коеструктор копии производного класса #3
объявил правильно констр. копий, теперь память не крошится. теперь при
присваивании и вызове соответствующей функции
C++
1
2
B e=a;
e.show1(d);
необходимая инфа не выводится. только вот не понятно почему.
Tulosba
:)
Эксперт С++
4384 / 3227 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
30.03.2013, 14:53     криво работает коеструктор копии производного класса #4
ТОрчОК, так нужно ещё оператор= реализовать. Вот, почитайте.
ТОрчОК
Заблокирован
30.03.2013, 15:06  [ТС]     криво работает коеструктор копии производного класса #5
Цитата Сообщение от Tulosba Посмотреть сообщение
ТОрчОК, так нужно ещё оператор= реализовать. Вот, почитайте.
зачем? почему же присваивание building d=b нормально работает?

Добавлено через 2 минуты
все вроде бы догнал. спасибо
Yandex
Объявления
30.03.2013, 15:06     криво работает коеструктор копии производного класса
Ответ Создать тему
Опции темы

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