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

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

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

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

29.03.2013, 13:34. Просмотров 267. Ответов 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++
Есть базовый класс CJobGeneral. В нём описано несколько методов. Есть унаследованный от него CJobCitomir с рядом своих методов. Есть...

Инициализация конструкторов производного класса - C++
Есть два класса class A { int x,y; A(int a, int b): x(a), y(b) { } };

Ошибка в функции производного класса - C++
Доброго времени суток! У меня такая проблема: не работает функция поп-фронт в производном классе. Не могу понять почему. Если я пробую...

Передать параметр конустркутору производного класса - C++
Нужно передать параметр конструктору производного класса &quot;P3&quot;. Вылетает ошибка при создании экземляра &quot;P3&quot; в классе &quot;D&quot;. Я уверен, что...

Массив обьектов класса предка и производного - C++
Можно ли, если у меня есть базовый НЕ абстрактный класс и проиводный от него с добавленым полем, допустим, целое число, сделать массив,...

Отрабатывает оператор базового, а не производного класса - C++
Здравствуйте! Собственно, вопрос в следующем. Я перегрузил оператор потокового вывода для базового и для производного класса. При выводе...

Передача типа из производного класса в родительский - C++
Добрый день! Есть код: template&lt;typename T&gt; struct Base { void test(typename T::Axis aaa) {} }; struct Child :...

Перегрузка operator>> для производного класса - C++
Базовый класс: Taxi_Car.h: #pragma once #include&lt;string&gt; using namespace std; class Taxi_Car { string Marka;

Обращение к бинарным операторам производного класса - C++
В классе StrLIdf, потомке StrL описан оператор friend StrLIdf operator&amp; (const StrLIdf &amp;, const StrLIdf &amp;); StrLIdf operator&amp;...

Объекты производного класса не наследуют методы базового - C++
Доброго всем дня! Вот такая у меня проблема возникла - объекты производного класса свободно вычитаются, но почему-то не складываются,...


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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Tulosba
:)
Эксперт С++
4393 / 3236 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
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
:)
Эксперт С++
4393 / 3236 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
30.03.2013, 14:53     криво работает коеструктор копии производного класса #4
ТОрчОК, так нужно ещё оператор= реализовать. Вот, почитайте.
ТОрчОК
Заблокирован
30.03.2013, 15:06  [ТС]     криво работает коеструктор копии производного класса #5
Цитата Сообщение от Tulosba Посмотреть сообщение
ТОрчОК, так нужно ещё оператор= реализовать. Вот, почитайте.
зачем? почему же присваивание building d=b нормально работает?

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

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