BAIZOR
0 / 0 / 0
Регистрация: 30.10.2010
Сообщений: 68
|
|
#1 | |
ООП + полиморфизм = wtf? - C++27.08.2011, 19:49. Просмотров 1988. Ответов 40
Метки нет Все метки)
(
Есть:
Класс A - отец Класс Б - дочерний Класс Ц - дочерный, наследуеться от А(сестра Б) Есть массив типа А, с названием Mass. Он хранит в себе объекты классов Б и Ц. в классе Б есть функция F(). в классе Ц есть функция F() (отличающаяся функционалом). Внамание! Вопрос: как провернуть такую часть кода - Mass[0..100].F();
0
|
|
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
|
27.08.2011, 19:49 |
Я подобрал для вас темы с готовыми решениями и ответами на вопрос ООП + полиморфизм = wtf? (C++):
40
ООП. Полиморфизм - C++ ООП Полиморфизм Наследование - C++ Полиморфизм инкапсуляция и наследование(ООП) - C++ Подкиньте практику по ООП + полиморфизм + шаблоны пожалуйста. - C++ ООП в С++ (наследование, инкапсуляция, полиморфизм, перегрузка операторов): что читать? - C++ Очередное WTF ))) - C++ |
grizlik78
![]() 1977 / 1470 / 124
Регистрация: 29.05.2011
Сообщений: 3,041
|
|
27.08.2011, 20:50 | #31 |
Я вот только сейчас понял, что эту фразу можно прочитать несколькими способами
![]() Я имел в виду, что при удалении объекта по базовому указателю с помощью delete, будет вызван деструктор наследника, при условии что деструктор виртуальный. Надеюсь в вопросе было это ![]()
0
|
BAIZOR
0 / 0 / 0
Регистрация: 30.10.2010
Сообщений: 68
|
||||||
27.08.2011, 21:33 [ТС] | #32 | |||||
да да) я просто стараюсь говорить проще, а то достало когда люди меня не понимают
Добавлено через 19 минут Господа... а у меня программа падает на вызове такоей же функции, только она с названием Render();
0
|
Заблокирован
|
|
27.08.2011, 21:35 | #33 |
В режиме отладки пройдитесь по предложениям вашей функции и посмотрите, где она виснет!
0
|
grizlik78
![]() 1977 / 1470 / 124
Регистрация: 29.05.2011
Сообщений: 3,041
|
|
27.08.2011, 21:38 | #34 |
В вектор помещается адрес временного объекта, который тут же уничтожается.
Добавлено через 1 минуту Правда сомнения у меня, что такое может компилироваться ![]() Добавлено через 1 минуту Но, к сожалению, компилируется.
0
|
BAIZOR
0 / 0 / 0
Регистрация: 30.10.2010
Сообщений: 68
|
||||||
27.08.2011, 21:42 [ТС] | #35 | |||||
"Виснет" именно на вызове, не в ней, а на вызове.
я так и думал... но как же это обойти? может как то так
0
|
grizlik78
![]() 1977 / 1470 / 124
Регистрация: 29.05.2011
Сообщений: 3,041
|
|
27.08.2011, 21:43 | #36 |
new/delete
0
|
BAIZOR
0 / 0 / 0
Регистрация: 30.10.2010
Сообщений: 68
|
|
27.08.2011, 21:44 [ТС] | #37 |
скомпилировалось.. но эффект тот же
Добавлено через 20 секунд сейчас попробую...
0
|
grizlik78
![]() 1977 / 1470 / 124
Регистрация: 29.05.2011
Сообщений: 3,041
|
|
27.08.2011, 21:45 | #38 |
Избавиться от необходимости delete можно с помощью "умных" указателей. А вот от new избавиться не удастся. Не переменные же отдельные создавать
![]()
0
|
BAIZOR
0 / 0 / 0
Регистрация: 30.10.2010
Сообщений: 68
|
||||||
27.08.2011, 21:46 [ТС] | #39 | |||||
Добавлено через 1 минуту поидеи вызов UI.clear(); должен вызвать деструкторы всех деток и после почистить их память?
0
|
grizlik78
![]() 1977 / 1470 / 124
Регистрация: 29.05.2011
Сообщений: 3,041
|
|
27.08.2011, 21:49 | #40 |
Нет, он просто удалит указатели, не разрушая сами объекты. Умные указатели при разрушении сами удалят объекты (только std::auto_ptr здесь никак не подойдёт). А с простыми указателями надо в цикле удалять все объекты ручным вызовом delete.
0
|
BAIZOR
0 / 0 / 0
Регистрация: 30.10.2010
Сообщений: 68
|
|
27.08.2011, 21:52 [ТС] | #41 |
Угу..., ладно, такой вариант у меня тоже был учтен
![]() Спасибо большое!
0
|
27.08.2011, 21:52 | |
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
|
27.08.2011, 21:52 |
Привет! Вот еще темы с ответами:
41
Расширение языка С. WTF? - C++ Спецификация файла. WTF? - C++ map assigment of read only data member или WTF? - C++ WTF не работает простой код на Visual studio 2008(баг?) - C++ Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |