Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
315 / 275 / 109
Регистрация: 27.09.2010
Сообщений: 1,058
1

Ошибка в наследовании

07.05.2012, 13:30. Показов 438. Ответов 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
#include <iostream>
using namespace std;
 
 
class A
{
public :
A(){}
~A(){}
virtual void eat()
        {
        cout<<"A eat aaa"<<endl;
        }
};
class B:public A
{
public :
B(){}
~B(){}
virtual void eat()
        {
        cout<<"B eat bbb"<<endl;
        }
};
 
class C:public  B
{
    public :
C(){}
~C(){}
virtual void eat()
        {
        cout<<"C eat ccc"<<endl;
        }
};
 
class D:public C
{
public :
D(){}
~D(){}
virtual void eat()
        {
        cout<<"D eat ddd"<<endl;
        }
 
};
class F:public D,public A
{
public :
F(){}
~F(){}
virtual void eat()
        {
        cout<<"F eat fff"<<endl;
        }
 
};
int main()
{
A * d=new F();
d->eat();
//delete [] d;
d=new B();
d->eat();
F f;
f.C::eat();
//delete [] d;
return 0;
}
Почему, когда я убираю комментарии с delete [] d; программа ругается на этапе выполнения?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
07.05.2012, 13:30
Ответы с готовыми решениями:

Ошибка в наследовании
Появилась проблема в наследовании с использованием виртуальных методов. Если записать код вот так,...

Ошибка при наследовании
Здраствуйте,не могу понять где именно оштбся,возможно кто-то поможет,код прилагаю //#include...

Ошибка при наследовании
Привет! Ни как не могу разобраться, в чём дело. Создал 2 класса: Base и Derived, где Derived...

Ошибка при наследовании
Подскажите пожалуйста почему наследование класса readwrite не работает? //Программа считывает...

4
Модератор
Эксперт по электронике
8429 / 6266 / 844
Регистрация: 14.02.2011
Сообщений: 21,742
07.05.2012, 13:35 2
Цитата Сообщение от titans2011 Посмотреть сообщение
Почему, когда я убираю комментарии с delete [] d;
наверно потому что выделяешь один объект
Цитата Сообщение от titans2011 Посмотреть сообщение
A * d=new F()
а удаляешь массив
Цитата Сообщение от titans2011 Посмотреть сообщение
delete [] d;
может так
C++
1
delete d;
0
4031 / 2321 / 292
Регистрация: 03.02.2011
Сообщений: 5,066
Записей в блоге: 10
07.05.2012, 13:35 3
Потому что d - не массив. Уберите квадратные скобки.
0
315 / 275 / 109
Регистрация: 27.09.2010
Сообщений: 1,058
07.05.2012, 13:45  [ТС] 4
Убрал. Если так, то всё работает:
C++
1
2
3
4
5
6
7
8
A * d=new F();
d->eat();
//delete  d;
d=new B();
d->eat();
F f;
f.C::eat();
delete  d;
А если убрать комент с первого delete то не работает. Ну ведь я логически рассуждаю, если переопределяю память старую нужно грохнуть. А вылазиет ошибка:
0
Миниатюры
Ошибка в наследовании  
156 / 156 / 27
Регистрация: 29.03.2012
Сообщений: 418
07.05.2012, 15:08 5
во-первых уберите в классе F наследование от А, он и так не явно наследуется от него.
во-вторых в классе А диструктор лучше сделать виртуальным
http://liveworkspace.org/code/... 24520e17fb
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
07.05.2012, 15:08

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Ошибка при наследовании
Вот такой код: class Figure2 { protected: int Color; int CenterX; int CenterY; public:

Ошибка при наследовании
Имеется архитектура вида: класс &quot;человек&quot;, от него производные &quot;препод&quot; и &quot;член приемной комиссии&quot;....

Ошибка при наследовании?
Программа компилируется, но консоль не выдает информацию. Связано ли это как то с переполнением...

Ошибка при наследовании класса
Всем доброго времени суток, пытаюсь отнаследовать класс, вот такой код я смастерил: #ifndef...

Ошибка компиляции при наследовании классов
У меня есть класс CNew который наследует класс CTransport но при компиляции выводит ошибку ниже 4...

Ошибка памяти. Передача массива при наследовании
#include&lt;iostream&gt; using namespace std; class map { protected: char **my_map; public:...


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

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

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