Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.62/13: Рейтинг темы: голосов - 13, средняя оценка - 4.62
 Аватар для ninja2
979 / 196 / 33
Регистрация: 26.09.2012
Сообщений: 2,041

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

09.09.2013, 13:44. Показов 3091. Ответов 51
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здорова господа!!!

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

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

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

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

Объясните новичку!!!!
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
09.09.2013, 13:44
Ответы с готовыми решениями:

[bcc32 Error] File1.cpp(19): E2316 'Stack<T>::Stack()' is not a member of 'Stack<T>'
Возникает ошибка File1.cpp(19): E2316 'Stack&lt;T&gt;::Stack()' is not a member of 'Stack&lt;T&gt;' #pragma hdrstop #pragma argsused ...

Есть ли связь между STL-stack и stack - высокопроизводительная память?
Куча источников, как всегда много отсебятины, в общем я запутался...

error C2440: 'return' : cannot convert from 'stack<X>' to 'stack<X> *'
Пишу класс PersonKeeper, в нем readPersons(должен считывать информацию о людях из входного потока (файла), создавать на основе этой...

51
Модератор
 Аватар для vxg
3406 / 2177 / 354
Регистрация: 13.01.2012
Сообщений: 8,444
09.09.2013, 13:54
объяснение простое - я тоже ничего не понял, составитель задания был большой оригинал или хочет вырастить из вас моцарта

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

Добавлено через 3 минуты
Давайте господа ваши варианты по решению или я так сделаю как описал, просто наследование от Stack сделаю и поменяю "представление" класса Stack, а потом на стадии выполнения буду приводить к нужному типу. Если так не правильно то как правильно делать????
0
Модератор
 Аватар для vxg
3406 / 2177 / 354
Регистрация: 13.01.2012
Сообщений: 8,444
09.09.2013, 14:06
мой вариант - спросить у преподавателя чего ему нужно. я конечно понимаю - программирование и анализ предложения русского языка вещи чем-то перекликающиеся, но вроде как вместо решения задания приходится гадать шарады... второй вариант - может "волшебные" слова есть в конспектах и их хочет услышать препод
1
 Аватар для ninja2
979 / 196 / 33
Регистрация: 26.09.2012
Сообщений: 2,041
09.09.2013, 14:08  [ТС]
Цитата Сообщение от vxg Посмотреть сообщение
мой вариант - спросить у преподавателя чего ему нужно.
Нет это задание из книги Страуструпа.
0
Модератор
 Аватар для vxg
3406 / 2177 / 354
Регистрация: 13.01.2012
Сообщений: 8,444
09.09.2013, 14:11
вот, например, познакомьтесь с выдержкой из книги Бьерн Страуструп. Язык программирования С++
"Унарная операция * называется косвенностью (или операцией
разыменования), она выбирает значение объекта, на который настроен
указатель." - я в шоке. кто бы мог подумать о таком применении великого русского языка. оказывается волей перевода (а может это как раз был очень умный переводчик и беда в том что все остальные переводчики были глупы) операция разыменования была названа косвенностью. хотя в этом тексте она как то слабо нахлобучиваеся на вашу песню
1
 Аватар для ninja2
979 / 196 / 33
Регистрация: 26.09.2012
Сообщений: 2,041
09.09.2013, 14:12  [ТС]
vxg, Так почему гадать в задании ж подсказка есть: "Любую проблему можно решить введя еще один уровень косвенности". Читай внимательно!!!
0
Модератор
 Аватар для vxg
3406 / 2177 / 354
Регистрация: 13.01.2012
Сообщений: 8,444
09.09.2013, 14:13
..оо.. я попал пальцем в небо. значит надо исследовать данный труд на заскоки в терминах

Добавлено через 43 секунды
ну и о какой косвенности в данном случае тогда речь? еще один уровень это еще одна звездочка? как то не так
1
 Аватар для ninja2
979 / 196 / 33
Регистрация: 26.09.2012
Сообщений: 2,041
09.09.2013, 14:14  [ТС]
Цитата Сообщение от vxg Посмотреть сообщение
вот, например, познакомьтесь с выдержкой из книги Бьерн Страуструп. Язык программирования С++
"Унарная операция * называется косвенностью (или операцией
разыменования), она выбирает значение объекта, на который настроен
указатель." - я в шоке. кто бы мог подумать о таком применении великого русского языка. оказывается волей перевода (а может это как раз был очень умный переводчик и беда в том что все остальные переводчики были глупы) операция разыменования была названа косвенностью. хотя в этом тексте она как то слабо нахлобучиваеся на вашу песню
Да что тут не ясного просто косвенно операция * вызывает operator*() или глобально operator*(тип, тип). Получается косвенно умножает или разыменовывает через вызовы функций.
0
Модератор
 Аватар для vxg
3406 / 2177 / 354
Регистрация: 13.01.2012
Сообщений: 8,444
09.09.2013, 14:16
Цитата Сообщение от ninja2 Посмотреть сообщение
что тут не ясного
неясно зачем разыменование называть косвенность (вообще ни рода ни падежа - что за зверь неясно) и зачем подразумевать у этой косвенности уровень (что за уровень? да это же просто еще одно разыменование ой ла ла). переводчика - к стене. книгу... (защищается от молнии) - в топку - как вариант: читать в оригинале без загонов перевода
1
 Аватар для ninja2
979 / 196 / 33
Регистрация: 26.09.2012
Сообщений: 2,041
09.09.2013, 14:17  [ТС]
Не придираемся к словам, смысл же понятно, что такое оператор *. Пофигу как что переведено смысл от этого не исказится.
0
Модератор
 Аватар для vxg
3406 / 2177 / 354
Регистрация: 13.01.2012
Сообщений: 8,444
09.09.2013, 14:21
кстати, в том переводе что я нашел в сети задача о которой речь звучит вообще интересно
13.(*3) Составьте такое описание класса stack, для которого можно
в динамике менять реализацию. Подсказка: "Всякую задачу можно
решить, введя еще одну косвенность".
сравните с
Напишите класс Stack, для которого можно сменить представление (в том переводе это реализация) на стадии выполнения программы (в том переводе это в динамике). Подсказка: "Любую проблему можно решить введя еще один уровень косвенности

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

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

Я сам в этом не сильно шарю, но смотрю ты тоже слабувато .
0
Модератор
 Аватар для vxg
3406 / 2177 / 354
Регистрация: 13.01.2012
Сообщений: 8,444
09.09.2013, 14:22
давайте попробуем перевести по-хорошему и решим. я не против
1
 Аватар для ninja2
979 / 196 / 33
Регистрация: 26.09.2012
Сообщений: 2,041
09.09.2013, 14:23  [ТС]
Цитата Сообщение от vxg Посмотреть сообщение
таким образом видим что ваш перевод вообще нельзя сделать ибо во время выполнения вы представление (тоже хз что это означает - предположим что имеется ввиду реализация) не измените. короче хх
ну походу ты не знаешь что такое RTTI.
0
Модератор
 Аватар для vxg
3406 / 2177 / 354
Регистрация: 13.01.2012
Сообщений: 8,444
09.09.2013, 14:23
Цитата Сообщение от ninja2 Посмотреть сообщение
но смотрю ты тоже слабувато
у меня длиннее, ты же видишь цифры)
сейчас найдем оригинальный перевод и все заработает. нелишним было бы выбросить сюда и сам класс собственно
1
 Аватар для ninja2
979 / 196 / 33
Регистрация: 26.09.2012
Сообщений: 2,041
09.09.2013, 14:35  [ТС]
Цитата Сообщение от 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, Мы можем сказать на неясность условия и сделать так как понимает, если кто спросит, скажем что в условии так было, я думаю гадать не нужно просто примерно сделать да и все.
0
Модератор
 Аватар для vxg
3406 / 2177 / 354
Регистрация: 13.01.2012
Сообщений: 8,444
09.09.2013, 14:37
Цитата Сообщение от ninja2 Посмотреть сообщение
решать?
возможно в силу своего ограниченного мировосприятия я понимаю задание
Напишите класс Stack, для которого можно сменить представление на стадии выполнения программы. Подсказка: "Любую проблему можно решить введя еще один уровень косвенности"
следующим образом: возьмите класс Stack и перепишите его таким образом что бы его методы стали виртуальными. тупо? да. однако 256 раз прогнав через кости это задание не приходит ничего красивее. они хотят сменить представление. под представлением я так понимаю они имеют ввиду сущность объекта. причем именно объекта Stack а не тех объектов которые он хранит. они хотят модифицировать его. хотят что бы наш абстрактный Stack вел себя по разному в зависимости от того как его расширили внутри программы.
1
 Аватар для ninja2
979 / 196 / 33
Регистрация: 26.09.2012
Сообщений: 2,041
09.09.2013, 14:50  [ТС]
Цитата Сообщение от 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, Можно создать уровень косвенности для любого класса в иерархии классов и решить любую проблему .
0
Модератор
 Аватар для vxg
3406 / 2177 / 354
Регистрация: 13.01.2012
Сообщений: 8,444
09.09.2013, 14:54
Цитата Сообщение от 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. Этот прием видимо применяется для реальных библиотек которые нельзя изменить, но нужно расширить.
очень все запутано, что то тут у вас не так)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
09.09.2013, 14:54
Помогаю со студенческими работами здесь

Как получить нужные данные из представления , а именно строки представления
Доброго времени суток. на главной форме у меня информация выводится через представление zews... информация в него попадает если запись...

Ошибка: "Unhandled exception: Stack cookie instrumentation code detected a stack-based buffer overrun"
Не могу понять почему значение ChoiceOfPlayer меняется и почему NumberOfRow и NumberOfColumn всегда последние значение цикла. Помогите...

Как проинициализировать std::stack<const int> obj ( std::stack<int>{} );
добрый день. вопрос в коде: http://rextester.com/VCVVML6656 #include &lt;iostream&gt; #include &lt;stack&gt; //-std=c++14...

Переустановка со сменой разрядности
Здравствуйте! Очень интересует такой вопрос: Имеем установленную Windows 7, ну жно переустановить на Windows 10. Так вот, есть ли хоть...

Работа со сменой картинки
Заметил кучу мертвых тем... Неужели никто не хочет рассказать как таки вставить картинку в программу а послу спокойно её менять по...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Ниже машинный перевод статьи The Thinkpad X220 Tablet is the best budget school laptop period . Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы,. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru