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

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

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Ханойская башня- тесты http://www.cyberforum.ru/cpp-beginners/thread822009.html
Переместить m дисков с одного из трех стержней на другой, соблюдая: 1) диски можно перемещать с одного стержня на другой только по одному; 2) нельзя класть больший диск на меньший. Вход: текстовый...
C++ MPI передача матриц в группу процессов Нужно передать 9 матриц в группу процессов. Использовал MPI_Scatter для предварительно созданной группы. Вылетало с ошибкой об неправильном коммуникаторе. Решил использовать MPI_COMM_WORLD. Но теперь... http://www.cyberforum.ru/cpp-beginners/thread821980.html
C++ как усовершенствовать студ.актив при помощи С++
Учусь на первом курсе, если честно, не особо смыслю в программировании :) Веду активную жизнь, состою в студенческом активе, по этому поводу препод меня подкалывает постоянно!Так вот, можете...
C++ Дописать в конец a.jpeg некий секретный текст. Вывести этот текст на экран
Как мне стало известно все .jpeg оканчиваются на маркер FFD9. Его мы и будем искать при выводе результата. Сначала откроем файл на дополнение "ab". Дополним Выглядеть функция будет так: void...
C++ Как закончить ввод в итератор ввода для потока http://www.cyberforum.ru/cpp-beginners/thread821962.html
По задумке в представленном ниже коде вводятся слова в консоль, потом как то ввод прекращается и программа дальше выполняет свои подсчеты и выводит результат. Что я должен нажать в консоли, что бы...
C++ Написать консольное приложение, которое позволяет рассчитывать длину гипотенузы по теореме Пифагора. Напишите листинг программы с комментариями. в С++ 6.0. Вот задание: " Написать консольное приложение, которое позволяет рассчитывать длину гипотенузы по теореме Пифагора. Длины катетов должны... подробнее

Показать сообщение отдельно
ТОрчОК
Заблокирован

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

29.03.2013, 13:34. Просмотров 269. Ответов 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 минут
может и не конструктор, но память все равно где-то крошится. в чем может быть причина.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru