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

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

Войти
Регистрация
Восстановить пароль
 
titans2011
295 / 256 / 43
Регистрация: 27.09.2010
Сообщений: 1,058
#1

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

07.05.2012, 13:30. Просмотров 298. Ответов 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; программа ругается на этапе выполнения?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
07.05.2012, 13:30     Ошибка в наследовании
Посмотрите здесь:

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

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

Ошибка: undefined reference to при наследовании класса - C++
Здравствуйте форумчане. Пытаюсь наследовать класс MyService от OAuthService и получаю множество ошибок: Ошибка: undefined reference to...

Ошибка multiple definition of main при наследовании - C++
Всем привет. Проблема описана много где в интернете , но я так и не смог понять в чём косяк у меня. Помогите разобраться. Есть...

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

О виртуальном наследовании - C++
Хотелось бы с Вашей помощью разобраться в деталях виртуального наследования. Вопрос такой: что на физическом уровне означает выражение ...

не до понимание в наследовании - C++
у нас есть допустим 2 класса. Один circle, другой Point. Circle наследует от Point. Тоесть Point базовый класс а Circle производный. ...

Сравнение при наследовании - C++
Есть базовый класс, пусть его зовут А, а у него есть 4 потомка. Пусть их зовут: B, C, D и E. Базовый класса абстрактный,в нём есть...

Конструкторы при наследовании - C++
Добрый вечер. Пишу программу с наследованием классов. Класс-родитель - nasled, производный от него - steck. Когда пытаюсь вызвать...

Ромб в множественном наследовании - C++
Добрый день ! Не помню как устранить проблему ромба в множественном наследовании. Вроде нужно втулить куда-то слово виртуал 2...


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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
ValeryS
Модератор
6543 / 5009 / 462
Регистрация: 14.02.2011
Сообщений: 16,656
07.05.2012, 13:35     Ошибка в наследовании #2
Цитата Сообщение от titans2011 Посмотреть сообщение
Почему, когда я убираю комментарии с delete [] d;
наверно потому что выделяешь один объект
Цитата Сообщение от titans2011 Посмотреть сообщение
A * d=new F()
а удаляешь массив
Цитата Сообщение от titans2011 Посмотреть сообщение
delete [] d;
может так
C++
1
delete d;
BRcr
4006 / 2295 / 155
Регистрация: 03.02.2011
Сообщений: 5,064
Записей в блоге: 10
07.05.2012, 13:35     Ошибка в наследовании #3
Потому что d - не массив. Уберите квадратные скобки.
titans2011
295 / 256 / 43
Регистрация: 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 то не работает. Ну ведь я логически рассуждаю, если переопределяю память старую нужно грохнуть. А вылазиет ошибка:
Миниатюры
Ошибка в наследовании  
antoha398
155 / 155 / 3
Регистрация: 29.03.2012
Сообщений: 418
07.05.2012, 15:08     Ошибка в наследовании #5
во-первых уберите в классе F наследование от А, он и так не явно наследуется от него.
во-вторых в классе А диструктор лучше сделать виртуальным
http://liveworkspace.org/code/a9c333...b46724520e17fb
Yandex
Объявления
07.05.2012, 15:08     Ошибка в наследовании
Ответ Создать тему
Опции темы

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