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

Stack со сменой представления - C++

Восстановить пароль Регистрация
 
 
Рейтинг: Рейтинг темы: голосов - 9, средняя оценка - 4.78
ninja2
 Аватар для ninja2
230 / 186 / 7
Регистрация: 26.09.2012
Сообщений: 2,018
Завершенные тесты: 1
09.09.2013, 13:44     Stack со сменой представления #1
Здорова господа!!!

Есть задачка: "Напишите класс Stack, для которого можно сменить представление на стадии выполнения программы. Подсказка: "Любую проблему можно решить введя еще один уровень косвенности" "

Тут не понятно что нам нужно сделать. Рассмотрим просто теоретически, допустим есть у нас класс Stack и нам что нужно от него по создавать производные классы допустим А и допустим B. Создаем указатель на Stack *p И создаем указатель на A *pa и указателю p присваиваем указатель pa и у нас получится что мы изменили представление класса Stack, что бы еще поменять то мы создаем указатель B* pb со своим набором дополнительных функций снова присваиваем p = pb уже новое представление, это имелось введу. Хотя на стадии выполнения имелось в веду
dynamic_cast<>() понятно что перед выполнением мы приведем Stack к нужному типу.

Что понимается под сменой представления на стадии выполнения? Я понимаю полиморфизм имелся введу или что?

А эта строчка что означает: "Любую проблему можно решить введя еще один уровень косвенности" Что такое уровень косвенности, косвенности это как бы через промежуток обращение не на прямую, видимо нужно производные классы создавать.

Объясните новичку!!!!
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
vxg
Модератор
 Аватар для vxg
2669 / 1680 / 158
Регистрация: 13.01.2012
Сообщений: 6,283
09.09.2013, 13:54     Stack со сменой представления #2
объяснение простое - я тоже ничего не понял, составитель задания был большой оригинал или хочет вырастить из вас моцарта

Добавлено через 44 секунды
...с тем же успехом он мог бы написать короче: любую проблему можно решить)
ninja2
 Аватар для ninja2
230 / 186 / 7
Регистрация: 26.09.2012
Сообщений: 2,018
Завершенные тесты: 1
09.09.2013, 14:02  [ТС]     Stack со сменой представления #3
Цитата Сообщение от vxg Посмотреть сообщение
объяснение простое - я тоже ничего не понял, составитель задания был большой оригинал или хочет вырастить из вас моцарта
Так может просто у вас знаний не хватает, что бы понять что имелось в веду в задании? Задание на проектирование классов ООП, что бы понять нужно хорошо знать шаблоны проектирования!

Добавлено через 3 минуты
Давайте господа ваши варианты по решению или я так сделаю как описал, просто наследование от Stack сделаю и поменяю "представление" класса Stack, а потом на стадии выполнения буду приводить к нужному типу. Если так не правильно то как правильно делать????
vxg
Модератор
 Аватар для vxg
2669 / 1680 / 158
Регистрация: 13.01.2012
Сообщений: 6,283
09.09.2013, 14:06     Stack со сменой представления #4
мой вариант - спросить у преподавателя чего ему нужно. я конечно понимаю - программирование и анализ предложения русского языка вещи чем-то перекликающиеся, но вроде как вместо решения задания приходится гадать шарады... второй вариант - может "волшебные" слова есть в конспектах и их хочет услышать препод
ninja2
 Аватар для ninja2
230 / 186 / 7
Регистрация: 26.09.2012
Сообщений: 2,018
Завершенные тесты: 1
09.09.2013, 14:08  [ТС]     Stack со сменой представления #5
Цитата Сообщение от vxg Посмотреть сообщение
мой вариант - спросить у преподавателя чего ему нужно.
Нет это задание из книги Страуструпа.
vxg
Модератор
 Аватар для vxg
2669 / 1680 / 158
Регистрация: 13.01.2012
Сообщений: 6,283
09.09.2013, 14:11     Stack со сменой представления #6
вот, например, познакомьтесь с выдержкой из книги Бьерн Страуструп. Язык программирования С++
"Унарная операция * называется косвенностью (или операцией
разыменования), она выбирает значение объекта, на который настроен
указатель." - я в шоке. кто бы мог подумать о таком применении великого русского языка. оказывается волей перевода (а может это как раз был очень умный переводчик и беда в том что все остальные переводчики были глупы) операция разыменования была названа косвенностью. хотя в этом тексте она как то слабо нахлобучиваеся на вашу песню
ninja2
 Аватар для ninja2
230 / 186 / 7
Регистрация: 26.09.2012
Сообщений: 2,018
Завершенные тесты: 1
09.09.2013, 14:12  [ТС]     Stack со сменой представления #7
vxg, Так почему гадать в задании ж подсказка есть: "Любую проблему можно решить введя еще один уровень косвенности". Читай внимательно!!!
vxg
Модератор
 Аватар для vxg
2669 / 1680 / 158
Регистрация: 13.01.2012
Сообщений: 6,283
09.09.2013, 14:13     Stack со сменой представления #8
..оо.. я попал пальцем в небо. значит надо исследовать данный труд на заскоки в терминах

Добавлено через 43 секунды
ну и о какой косвенности в данном случае тогда речь? еще один уровень это еще одна звездочка? как то не так
ninja2
 Аватар для ninja2
230 / 186 / 7
Регистрация: 26.09.2012
Сообщений: 2,018
Завершенные тесты: 1
09.09.2013, 14:14  [ТС]     Stack со сменой представления #9
Цитата Сообщение от vxg Посмотреть сообщение
вот, например, познакомьтесь с выдержкой из книги Бьерн Страуструп. Язык программирования С++
"Унарная операция * называется косвенностью (или операцией
разыменования), она выбирает значение объекта, на который настроен
указатель." - я в шоке. кто бы мог подумать о таком применении великого русского языка. оказывается волей перевода (а может это как раз был очень умный переводчик и беда в том что все остальные переводчики были глупы) операция разыменования была названа косвенностью. хотя в этом тексте она как то слабо нахлобучиваеся на вашу песню
Да что тут не ясного просто косвенно операция * вызывает operator*() или глобально operator*(тип, тип). Получается косвенно умножает или разыменовывает через вызовы функций.
vxg
Модератор
 Аватар для vxg
2669 / 1680 / 158
Регистрация: 13.01.2012
Сообщений: 6,283
09.09.2013, 14:16     Stack со сменой представления #10
Цитата Сообщение от ninja2 Посмотреть сообщение
что тут не ясного
неясно зачем разыменование называть косвенность (вообще ни рода ни падежа - что за зверь неясно) и зачем подразумевать у этой косвенности уровень (что за уровень? да это же просто еще одно разыменование ой ла ла). переводчика - к стене. книгу... (защищается от молнии) - в топку - как вариант: читать в оригинале без загонов перевода
ninja2
 Аватар для ninja2
230 / 186 / 7
Регистрация: 26.09.2012
Сообщений: 2,018
Завершенные тесты: 1
09.09.2013, 14:17  [ТС]     Stack со сменой представления #11
Не придираемся к словам, смысл же понятно, что такое оператор *. Пофигу как что переведено смысл от этого не исказится.
vxg
Модератор
 Аватар для vxg
2669 / 1680 / 158
Регистрация: 13.01.2012
Сообщений: 6,283
09.09.2013, 14:21     Stack со сменой представления #12
кстати, в том переводе что я нашел в сети задача о которой речь звучит вообще интересно
13.(*3) Составьте такое описание класса stack, для которого можно
в динамике менять реализацию. Подсказка: "Всякую задачу можно
решить, введя еще одну косвенность".
сравните с
Напишите класс Stack, для которого можно сменить представление (в том переводе это реализация) на стадии выполнения программы (в том переводе это в динамике). Подсказка: "Любую проблему можно решить введя еще один уровень косвенности

таким образом видим что ваш перевод вообще нельзя сделать ибо во время выполнения вы представление (тоже хз что это означает - предположим что имеется ввиду реализация) не измените. короче хх
ninja2
 Аватар для ninja2
230 / 186 / 7
Регистрация: 26.09.2012
Сообщений: 2,018
Завершенные тесты: 1
09.09.2013, 14:22  [ТС]     Stack со сменой представления #13
Цитата Сообщение от vxg Посмотреть сообщение
и зачем подразумевать у этой косвенности уровень
ну смотри если мы что касается задачи, если мы обращаемся через посредник к классу, то мы как бы косвенно к им манипулируем, если на прямую то это уже не косвенно. Уровень косвенности создать еще один, я думаю нужно просто наследования сделать от Stack и мы будет "косвенно" обращатся к стек, + добавим какие нить функции.

Плюс на стадии выполнения можно сам Stack поменять либо чисто оставить такой какой есть, либо изменить представление на представление производных классов используя dynamic_cast<>().

Я сам в этом не сильно шарю, но смотрю ты тоже слабувато .
vxg
Модератор
 Аватар для vxg
2669 / 1680 / 158
Регистрация: 13.01.2012
Сообщений: 6,283
09.09.2013, 14:22     Stack со сменой представления #14
давайте попробуем перевести по-хорошему и решим. я не против
ninja2
 Аватар для ninja2
230 / 186 / 7
Регистрация: 26.09.2012
Сообщений: 2,018
Завершенные тесты: 1
09.09.2013, 14:23  [ТС]     Stack со сменой представления #15
Цитата Сообщение от vxg Посмотреть сообщение
таким образом видим что ваш перевод вообще нельзя сделать ибо во время выполнения вы представление (тоже хз что это означает - предположим что имеется ввиду реализация) не измените. короче хх
ну походу ты не знаешь что такое RTTI.
vxg
Модератор
 Аватар для vxg
2669 / 1680 / 158
Регистрация: 13.01.2012
Сообщений: 6,283
09.09.2013, 14:23     Stack со сменой представления #16
Цитата Сообщение от ninja2 Посмотреть сообщение
но смотрю ты тоже слабувато
у меня длиннее, ты же видишь цифры)
сейчас найдем оригинальный перевод и все заработает. нелишним было бы выбросить сюда и сам класс собственно
ninja2
 Аватар для ninja2
230 / 186 / 7
Регистрация: 26.09.2012
Сообщений: 2,018
Завершенные тесты: 1
09.09.2013, 14:35  [ТС]     Stack со сменой представления #17
Цитата Сообщение от vxg Посмотреть сообщение
давайте попробуем перевести по-хорошему и решим. я не против
Можно так как я описал решать: сделать наследника например А и через проверять dynamic_cast<>() какой у нас класс передается
C++
1
2
3
4
5
6
7
8
9
10
11
12
 
f(Stack* s)
{
 if(A* p =dynamic_cast<A*>(s)) 
    //представление А
else if(B* p=dynamic_cast<B*>(s))
   //представление B
else
   //я думаю если реально предадим указатель на базовый класс
  //то он не приведется в A или B (призабыл) 
  //тут сам реальный базовый Stack
}
Отак от обрабатывать на стадии выполнения???
Кто думаешь что по другому ее решать?

Добавлено через 5 минут
vxg, Мы можем сказать на неясность условия и сделать так как понимает, если кто спросит, скажем что в условии так было, я думаю гадать не нужно просто примерно сделать да и все.
vxg
Модератор
 Аватар для vxg
2669 / 1680 / 158
Регистрация: 13.01.2012
Сообщений: 6,283
09.09.2013, 14:37     Stack со сменой представления #18
Цитата Сообщение от ninja2 Посмотреть сообщение
решать?
возможно в силу своего ограниченного мировосприятия я понимаю задание
Напишите класс Stack, для которого можно сменить представление на стадии выполнения программы. Подсказка: "Любую проблему можно решить введя еще один уровень косвенности"
следующим образом: возьмите класс Stack и перепишите его таким образом что бы его методы стали виртуальными. тупо? да. однако 256 раз прогнав через кости это задание не приходит ничего красивее. они хотят сменить представление. под представлением я так понимаю они имеют ввиду сущность объекта. причем именно объекта Stack а не тех объектов которые он хранит. они хотят модифицировать его. хотят что бы наш абстрактный Stack вел себя по разному в зависимости от того как его расширили внутри программы.
ninja2
 Аватар для ninja2
230 / 186 / 7
Регистрация: 26.09.2012
Сообщений: 2,018
Завершенные тесты: 1
09.09.2013, 14:50  [ТС]     Stack со сменой представления #19
Цитата Сообщение от vxg Посмотреть сообщение
возьмите класс Stack и перепишите его таким образом что бы его методы стали виртуальными. тупо?
Так можно его не переписывать просто сделать наследование, у нас же может быть какой нить комерческий класс. Ну да виртуальные полюбом нужно делать методы, а то dynamic_cast<>() работать не будет. Ну да наверно так и делать.

А для реального класса Stack который мы не можем переписать не абстрактного, мы можем сделать наследование к классу у которого будет абстрактный член (полиморфный тип) и от него еще поделать наследники, двойной как бы уровень косвенности, да наверно так.
Там пишется что к любой иерархии классов можно лекгко встроить любой другой класс или иерархию, там просто двойное наследование применяют и наследник имеет свойства двух иерархий.

О еще вариант если Stack не полиморфный класс и мы его изменить не можем, то мы создаем класс свой Abstrakt_Stack полиморфный, от него делаем производный класс A : public Abstrakt_Stack, public Stack и B : public Abstrakt_Stack, public Stack эти классы будут размым представлением класса Stack и уже через указатель не Stack, а Abstrakt_Stack мы можем в реальном времени менять представление Stack. Этот прием видимо применяется для реальных библиотек которые нельзя изменить, но нужно расширить.

Добавлено через 2 минуты
vxg, Можно создать уровень косвенности для любого класса в иерархии классов и решить любую проблему .
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
09.09.2013, 14:54     Stack со сменой представления
Еще ссылки по теме:

Циклические программы с регулярной сменой аргумента, содержащих разветвления C++
Stack overflow C++
Ошибка: "Unhandled exception: Stack cookie instrumentation code detected a stack-based buffer overrun" C++

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

Или воспользуйтесь поиском по форуму:
vxg
Модератор
 Аватар для vxg
2669 / 1680 / 158
Регистрация: 13.01.2012
Сообщений: 6,283
09.09.2013, 14:54     Stack со сменой представления #20
Цитата Сообщение от ninja2 Посмотреть сообщение
а то dynamic_cast<>() работать не будет
нам не нужно делать dynamic_cast. у нас будет абстрактный стек. и у него виртуальный метод, например, вставить. мы это метод расширим в классе, например, папка с файлами. расширим таким образом что бы вставка кроме стандартного поведения (обновления списка элементов стека) приводила к реальной вставке файла в папку. если мы создадим объект класса папка с файлами и передадим указатель на него в функцию которая принимает указатель на стек, то эта функция оперируя со стеком будет фактически обращаться к папке с файлами.
Цитата Сообщение от ninja2 Посмотреть сообщение
мы можем сделать наследование к классу у которого будет абстрактный член
зачем нам еще одно поле в классе? пусть даже абстрактного типа?
Цитата Сообщение от ninja2 Посмотреть сообщение
О еще вариант если Stack не полиморфный класс и мы его изменить не можем, то мы создаем класс свой Abstrakt_Stack полиморфный, от него делаем производный класс A : public Abstrakt_Stack, public Stack и B : public Abstrakt_Stack, public Stack эти классы будут размым представлением класса Stack и уже через указатель не Stack, а Abstrakt_Stack мы можем в реальном времени менять представление Stack. Этот прием видимо применяется для реальных библиотек которые нельзя изменить, но нужно расширить.
очень все запутано, что то тут у вас не так)
Yandex
Объявления
09.09.2013, 14:54     Stack со сменой представления
Ответ Создать тему
Опции темы

Текущее время: 16:22. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru