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

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

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

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

07.05.2012, 13:30. Просмотров 306. Ответов 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
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
07.05.2012, 13:30
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Ошибка в наследовании (C++):

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

Ошибка при наследовании - C++
Здраствуйте,не могу понять где именно оштбся,возможно кто-то поможет,код прилагаю //#include &quot;stdafx.h&quot; #include &lt;iostream&gt; ...

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

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

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

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

4
ValeryS
Модератор
6651 / 5060 / 470
Регистрация: 14.02.2011
Сообщений: 16,918
07.05.2012, 13:35 #2
Цитата Сообщение от titans2011 Посмотреть сообщение
Почему, когда я убираю комментарии с delete [] d;
наверно потому что выделяешь один объект
Цитата Сообщение от titans2011 Посмотреть сообщение
A * d=new F()
а удаляешь массив
Цитата Сообщение от titans2011 Посмотреть сообщение
delete [] d;
может так
C++
1
delete d;
0
BRcr
4008 / 2297 / 155
Регистрация: 03.02.2011
Сообщений: 5,064
Записей в блоге: 10
07.05.2012, 13:35 #3
Потому что d - не массив. Уберите квадратные скобки.
0
titans2011
297 / 258 / 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 то не работает. Ну ведь я логически рассуждаю, если переопределяю память старую нужно грохнуть. А вылазиет ошибка:
0
Миниатюры
Ошибка в наследовании  
antoha398
155 / 155 / 3
Регистрация: 29.03.2012
Сообщений: 418
07.05.2012, 15:08 #5
во-первых уберите в классе F наследование от А, он и так не явно наследуется от него.
во-вторых в классе А диструктор лучше сделать виртуальным
http://liveworkspace.org/code/a9c333...b46724520e17fb
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
07.05.2012, 15:08
Привет! Вот еще темы с ответами:

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
5
Yandex
Объявления
07.05.2012, 15:08
Ответ Создать тему
Опции темы

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