|
979 / 196 / 33
Регистрация: 26.09.2012
Сообщений: 2,041
|
|
Stack со сменой представления09.09.2013, 13:44. Показов 3692. Ответов 51
Метки нет (Все метки)
Здорова господа!!!
Есть задачка: "Напишите класс Stack, для которого можно сменить представление на стадии выполнения программы. Подсказка: "Любую проблему можно решить введя еще один уровень косвенности" " Тут не понятно что нам нужно сделать. Рассмотрим просто теоретически, допустим есть у нас класс Stack и нам что нужно от него по создавать производные классы допустим А и допустим B. Создаем указатель на Stack *p И создаем указатель на A *pa и указателю p присваиваем указатель pa и у нас получится что мы изменили представление класса Stack, что бы еще поменять то мы создаем указатель B* pb со своим набором дополнительных функций снова присваиваем p = pb уже новое представление, это имелось введу. Хотя на стадии выполнения имелось в веду dynamic_cast<>() понятно что перед выполнением мы приведем Stack к нужному типу. Что понимается под сменой представления на стадии выполнения? Я понимаю полиморфизм имелся введу или что? А эта строчка что означает: "Любую проблему можно решить введя еще один уровень косвенности" Что такое уровень косвенности, косвенности это как бы через промежуток обращение не на прямую, видимо нужно производные классы создавать. Объясните новичку!!!!
0
|
|
| 09.09.2013, 13:44 | |
|
Ответы с готовыми решениями:
51
[bcc32 Error] File1.cpp(19): E2316 'Stack<T>::Stack()' is not a member of 'Stack<T>' Есть ли связь между STL-stack и stack - высокопроизводительная память? error C2440: 'return' : cannot convert from 'stack<X>' to 'stack<X> *' |
|
979 / 196 / 33
Регистрация: 26.09.2012
Сообщений: 2,041
|
|||
| 09.09.2013, 15:06 [ТС] | |||
|
А от в варианте что я описал через указатель на Abstrakt_Stack нужно проверять обязательно, потому что мы можем определить класс C : public Abstrakt_Stack и не сделать еще : public Stack и если мы без dynamic_cast<>() обратимся к указателю Abstrakt_Stack а он будет указывать на объект C который не есть Stack и вызовем методы Stak() то будет ошибка, тут нужно обязательно проверять. Добавлено через 5 минут Я возможно ошибаюсь, не сильно в этом шарю. Нужно поэкспериментировать.
0
|
|||
|
Модератор
3410 / 2182 / 354
Регистрация: 13.01.2012
Сообщений: 8,476
|
|||||||
| 09.09.2013, 15:10 | |||||||
1
|
|||||||
|
979 / 196 / 33
Регистрация: 26.09.2012
Сообщений: 2,041
|
||
| 09.09.2013, 15:10 [ТС] | ||
|
0
|
||
|
Модератор
3410 / 2182 / 354
Регистрация: 13.01.2012
Сообщений: 8,476
|
|
| 09.09.2013, 15:12 | |
|
0
|
|
|
979 / 196 / 33
Регистрация: 26.09.2012
Сообщений: 2,041
|
||
| 09.09.2013, 15:13 [ТС] | ||
|
0
|
||
|
Модератор
3410 / 2182 / 354
Регистрация: 13.01.2012
Сообщений: 8,476
|
||
| 09.09.2013, 15:17 | ||
|
0
|
||
|
979 / 196 / 33
Регистрация: 26.09.2012
Сообщений: 2,041
|
||
| 09.09.2013, 15:25 [ТС] | ||
|
Ну и еще пример без Abstrakt_Stack, просто с Stack ты поделал от него наследование и некоторым классам ты сделал двойное наследование расширил например A : public Stack, public List и тебе нужно в f(Stack*) знать что это именно класс A а не какой то там B, для того что бы вызвать специфические функции из класса List. А от еще пример если ты просто сделал наследование от Stack производные классы А и производный класс B, в классе А есть метод print_A(), в классе B есть метод fff_B() специфические для производных классов, есть функция f(Stack* p) и ты должен в ней вызвать разные функции проверить если if(A*pp=dynamic_cast<A*>(p)) pp->print_A(); if(B* pp=dynamic_cast<B*>(p)) pp->fff_B(). Ну и как ты это все реализуешь без dynamic_cast ??? все в классе Stack определишь? А если производных классов у тебя будет не один, а 30 и для каждого нужно свои уникальные функции вызывать? Это несколько вариантов их наверняка больше.
0
|
||
|
Модератор
3410 / 2182 / 354
Регистрация: 13.01.2012
Сообщений: 8,476
|
||
| 09.09.2013, 15:28 | ||
|
0
|
||
|
979 / 196 / 33
Регистрация: 26.09.2012
Сообщений: 2,041
|
|
| 09.09.2013, 15:29 [ТС] | |
|
Ну в принципе если их штук 30 будет то все можно в классе Stack определить сделать так это называется "Жирный интерфейс", но его я не помню точно вроде советуют избегать, хотя можно и так.
0
|
|
|
Модератор
3410 / 2182 / 354
Регистрация: 13.01.2012
Сообщений: 8,476
|
||
| 09.09.2013, 15:31 | ||
|
0
|
||
|
979 / 196 / 33
Регистрация: 26.09.2012
Сообщений: 2,041
|
||
| 09.09.2013, 15:32 [ТС] | ||
|
Но для реальных наследников А B у них же разные методы, мыж не можем сделать все в базовом классе и тупо вызывать из функции f(Stack*) виртуальные функции, нам же мб нужно для некоторых типов и свои вызвать, так что без приведения не обойтись.
0
|
||
|
Модератор
3410 / 2182 / 354
Регистрация: 13.01.2012
Сообщений: 8,476
|
||
| 09.09.2013, 15:37 | ||
|
1
|
||
|
979 / 196 / 33
Регистрация: 26.09.2012
Сообщений: 2,041
|
||
| 09.09.2013, 15:38 [ТС] | ||
.
0
|
||
|
Модератор
3410 / 2182 / 354
Регистрация: 13.01.2012
Сообщений: 8,476
|
|
| 09.09.2013, 15:41 | |
|
1
|
|
|
979 / 196 / 33
Регистрация: 26.09.2012
Сообщений: 2,041
|
|||
| 09.09.2013, 15:53 [ТС] | |||
|
И есть функция fun(машина* p) и нам нужно в ней знать к какому классу машина относится если к службам то вызвать для них спецефические допустим виртуальные функции из "экстренных служб" и "машина", а если к машина, то просто функции "машина". Тут от видно по любому придется приведение типов делать как не крути. Просто этими всеми делами в конторах обычно проектировщики занимаются, программистам то незачем за это думах, программисты это кодеры, проектировщик показывает что нужно делать - дает задание, написать то то, то то , относительно низкоуровневый код, а сам уже работает с более высокоуровневым кодом. Это не я так думаю это вычитал в книге про организацию контор по созданию программ. Добавлено через 1 минуту
0
|
|||
|
Модератор
3410 / 2182 / 354
Регистрация: 13.01.2012
Сообщений: 8,476
|
||
| 09.09.2013, 15:57 | ||
|
1
|
||
|
979 / 196 / 33
Регистрация: 26.09.2012
Сообщений: 2,041
|
||
| 09.09.2013, 16:00 [ТС] | ||
|
Добавлено через 1 минуту Но это ничего не меняет, нам нужно вызвать через указатель свойства из экстренных служб, от уже нужно приведение типов, что бы знать что это скорая помощь или пажарная машина. Вообще машины разделить на две просто машины и служебные машины, ну ладно это мелочь, не цепляемся к деталям смысл я думаю понятен, где нужно применять приведение типов.
0
|
||
|
Модератор
3410 / 2182 / 354
Регистрация: 13.01.2012
Сообщений: 8,476
|
||
| 09.09.2013, 16:03 | ||
|
0
|
||
|
979 / 196 / 33
Регистрация: 26.09.2012
Сообщений: 2,041
|
||
| 09.09.2013, 16:07 [ТС] | ||
|
0
|
||
|
Модератор
3410 / 2182 / 354
Регистрация: 13.01.2012
Сообщений: 8,476
|
||
| 09.09.2013, 16:11 | ||
|
0
|
||
| 09.09.2013, 16:11 | |
|
Как получить нужные данные из представления , а именно строки представления Ошибка: "Unhandled exception: Stack cookie instrumentation code detected a stack-based buffer overrun" Как проинициализировать std::stack<const int> obj ( std::stack<int>{} );
Работа со сменой картинки Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Генератор паролей (вариант №4)
Maks 01.11.2026
После публикации 3-го варианта генератора паролей, разослал его своим коллегам (с целью оценки), в итоге были получены следующие рекомендации:
1. Вернуть возможность использования знаков | 1 l I;. . .
|
Генератор паролей (вариант №3)
Maks 30.10.2026
Финальная версия генератора паролей 1С.
Доработка решения в этот раз коснулась только визуальной части, а именно, добавлен реквизит ДопПараметры (тип Булево), который скрывает/ отображает реквизиты:. . .
|
Магическое мышление и магия, современная наука не отличима от магии (говорит ИИ Джемени)
zorxor 30.10.2026
Джемени, расскажи, пожалуйста, что такое магическое мышление, что такое магия, почему современная наука чем-то напоминает магию?
Фраза «Любая достаточно развитая технология неотличима от магии». . .
|
За какое время ИИ может подобрать пароль по хешу (рассказывает Джемени ИИ)
zorxor 30.10.2026
Расскажи, Джемени, если известен хэш МД5, например, за сколько ИИ сможет подобрать соответствующий пароль?
Искусственный интеллект (ИИ) может подобрать простой или средний по сложности пароль по. . .
|
|
Кто убил Suno? Почему наше солнышко погасло? (диалог с ИИ Джемени)
zorxor 30.10.2026
Как убивали Suno. Хронология.
«Убийство» музыкальной нейросети Suno — это затяжной процесс, в котором технологический хайп стартапа разбился о жесткую реальность судебных исков от гигантов. . .
|
Генератор паролей (вариант №2)
Maks 30.10.2026
Обновленная версия ранее созданной обработки.
Добавлены следующие реквизиты типа Булево:
- Буквы;
- Цифры;
- Символы.
Изменена логика команды "Сгенерировать" и процедуры "ПриОткрытии":. . .
|
Генератор паролей (вариант №1)
Maks 29.10.2026
Реализация из решения ниже выполнена исключительно по моей инициативе, дабы облегчить себе работу в создании паролей для администрируемых мною сервисов и пользователей.
Самым главным критерием для. . .
|
Установка ChatGPT (Codex) на Windows без использования Microsoft Store
Fabien159 28.10.2026
Здравствуйте всем читающим! Опишу процесс установки ChatGPT (Codex) на Windows, если по каким-то причинам у вас не получается устанавить его через Microsoft Store.
И так:
1. Скачиваем с. . .
|