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

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

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

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

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

Здорова господа!!!

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

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

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

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

Объясните новичку!!!!
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
09.09.2013, 13:44     Stack со сменой представления
Посмотрите здесь:

Циклические программы с регулярной сменой аргумента. - C++
Код С++ //_-------------------------------------------------------------------------- #include &lt;vcl.h&gt; #include &lt;math.h&gt; ...

Циклические программы с регулярной сменой аргумента, содержащие ветвления - C++
Помогите написать программу задачи. Плиз. Вывести на печать значения, удовлетворяют условию y&gt; 1.35 i y &lt;2.4, и соответствующие...

Циклические программы с регулярной сменой аргумента, содержащих разветвления - C++
Лабораторная работа 4. Циклические программы с регулярной сменой аргумента, содержащих разветвления 4.6 вычислить разницу между...

stack - C++
не могу норм прокомпилировать прогу, вот код, подскажите что не так! #include &lt;stack&gt; #include &lt;iostream&gt; int main() { const int...

Stack was corrupted - C++
Будьте добры, объясните, почему такая ошибку выдает: Run-Time Check Failure #2 - Stack around the variable 'My' was corrupted. ...

класс stack - C++
Всем привет))помогите пожалуйста....нужна прога на тему шаблоны функций и классов,при чём дан класс stack.Перегрузить операции &quot;+&quot;-добавить...

STACK STL - C++
Будьте добры, обьясните(прокомментируйте) обозначеные строки кода на правильную скобочную последовательность. #include &lt;iostream&gt; ...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
ninja2
230 / 186 / 7
Регистрация: 26.09.2012
Сообщений: 2,018
Завершенные тесты: 1
09.09.2013, 16:12  [ТС]     Stack со сменой представления #41
А можно сделать уровень косвенности как нам советуют "Любую проблему можно решить введя еще один уровень косвенности" например Car_service в котором будет хранится указатель на службы создать виртуальные методы и от него создать наследников пажарная машина, скорая помощь.
Это делается для удобства что бы одну проверку делать в приведении типов Car_service* p=dynamic_cast<Car_service*>( "машины" *) и потом уже вызвать виртуальные функции, потому что у нас служебных машин может быть очень много и для каждой делать проверку это утомительно.
vxg
Модератор
3112 / 1914 / 206
Регистрация: 13.01.2012
Сообщений: 7,298
09.09.2013, 16:13     Stack со сменой представления #42
не легче ли просто проверить нулевой указатель у службы или нет? или если нужно отобрать машины одной службы сравнить имена служб?
ninja2
230 / 186 / 7
Регистрация: 26.09.2012
Сообщений: 2,018
Завершенные тесты: 1
09.09.2013, 16:15  [ТС]     Stack со сменой представления #43
Цитата Сообщение от vxg Посмотреть сообщение
и где мы будем приводить? у нас остались просто машины которым может быть назначена или не назначена какая нибудь служба.
Ну как где в функции которая будет использовать эти машины в f(car* ) например.

Ладно проехали эта тема на вкус и цвет, кто как хочет так и ***чит. Смысл поняте.
ForEveR
В астрале
Эксперт С++
7967 / 4729 / 320
Регистрация: 24.06.2010
Сообщений: 10,539
Завершенные тесты: 3
09.09.2013, 16:18     Stack со сменой представления #44
Вообще, представление непосредственно в программировании встречается, насколько я понимаю, лишь в одном контексте (MVC - Model View Controller, оно же Модель Представление (вид) Поведение). Так же вполне возможно что имеется ввиду смена внутреннего поведения на этапе выполнения (читай использование некого интерфейса). Т.е. нечто вроде

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
class AbstractStack {};
class ListStack : public AbstractStack {};
class ArrayStack : public AbstractStack {};
class Stack
{
public:
    Stack(AbstractStack* impl) : impl_(impl)
    {
    }
    void set(AbstractStack* new_impl)
    {
        impl_ = new_impl;
    }
private:
    AbstractStack* impl_;
};
ninja2
230 / 186 / 7
Регистрация: 26.09.2012
Сообщений: 2,018
Завершенные тесты: 1
09.09.2013, 16:24  [ТС]     Stack со сменой представления #45
Цитата Сообщение от vxg Посмотреть сообщение
не легче ли просто проверить нулевой указатель у службы или нет? или если нужно отобрать машины одной службы сравнить имена служб?
Ну тыж видешь когда мы создадим косвенный класс car_service, то у нас у "пажарной машины" пропадет указатель просто появятся виртуальные функции из car_service, мы их вызовем и все. А таких наследников от car_servise может быть очень много и у каждого будет свои перегруженные функции. Прикинь какое удобство не знать за 30 функций ничего и тремя строчками кода вызывать нужную функцию, это прекрасно.

Добавлено через 6 минут
ForEveR, Ну как вариант пойдет.
vxg
Модератор
3112 / 1914 / 206
Регистрация: 13.01.2012
Сообщений: 7,298
09.09.2013, 16:26     Stack со сменой представления #46
Цитата Сообщение от ninja2 Посмотреть сообщение
Ну как вариант пойдет
это крутая пушка но найти ей применение не так просто. что бы так делать нужны причины.
ForEveR
В астрале
Эксперт С++
7967 / 4729 / 320
Регистрация: 24.06.2010
Сообщений: 10,539
Завершенные тесты: 3
09.09.2013, 16:28     Stack со сменой представления #47
Чем гадать куда проще поискать английскую версию книги, не так ли?
Write a class Stack for which it is possible to change implementation at run time. Hint:
‘‘Every problem is solved by yet another indirection.’
ninja2, Мне сейчас конечно же лень читать всю 25-ю главу, но задачи даются для того, чтобы проверить как ты усвоил то, что описано в данной главе (в редких случаях в предыдущих). Поэтому я просто советую читать до полного прозрения.
vxg
Модератор
3112 / 1914 / 206
Регистрация: 13.01.2012
Сообщений: 7,298
09.09.2013, 16:31     Stack со сменой представления #48
Цитата Сообщение от ForEveR Посмотреть сообщение
Ведь чем гадать куда проще поискать английскую версию книги, не так ли?
ТЫ лучший!!! я не смог найти в оригинале второго издания где было это задание. только третье почему то лежит. я так и говорил - ищите то что спрашивают - вот на языке оригинала все понятно. а то представления, косвенность... и все таки даже в оригинале странное задание ибо прямо implementation они не поменяют - код проги останется неизменным
ForEveR
В астрале
Эксперт С++
7967 / 4729 / 320
Регистрация: 24.06.2010
Сообщений: 10,539
Завершенные тесты: 3
09.09.2013, 16:35     Stack со сменой представления #49
vxg, Так, я тоже 2 не искал. Просто по первой же ссылке на тему третьего издания. И там есть это задание в 25 главе 13 задание.
vxg
Модератор
3112 / 1914 / 206
Регистрация: 13.01.2012
Сообщений: 7,298
09.09.2013, 16:37     Stack со сменой представления #50
Цитата Сообщение от ForEveR Посмотреть сообщение
Так, я тоже 2 не искал
значит карма. чего же тут удивительного - вы смогли найти книгу и задание в 7,2626 быстрее чем я(
ForEveR
В астрале
Эксперт С++
7967 / 4729 / 320
Регистрация: 24.06.2010
Сообщений: 10,539
Завершенные тесты: 3
09.09.2013, 17:00     Stack со сменой представления #51
Цитата Сообщение от vxg Посмотреть сообщение
и все таки даже в оригинале странное задание ибо прямо implementation они не поменяют - код проги останется неизменным
Код программы это одно. Имплементация это все же другое. Я бы сказал, что это нечто, с помощью чего реализован класс. То есть, делает, если смотреть со стороны, он одно и то же, однако реализация различается.
По сути даже у контейнеров стандартной библиотеки имплементацию в какой-то степени можно поменять (сконструировать контейнер с другим аллокатором), но только на этапе компиляции.

Добавлено через 19 минут
Пробежав глазами главу 25, сложилось ощущение, что наиболее правильным вариантом, будет предложенный ранее с абстрактными классами
C++
1
2
3
class Stack {};
class ListStack : public Stack {};
class ArrayStack : public Stack {};
Ибо ни одна другая идиома, описанная в главе, особо не катит в данном контексте (разве что Handle и то вряд ли).
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
09.09.2013, 18:03     Stack со сменой представления
Еще ссылки по теме:

Удаление в stack - C++
Помогите пожалуйста решите проблему. Мне надо создать структуру данных через stack void stack :: add(printer addp) { qelem...

STL stack - C++
не мог бы кто нить обьяснить этот код!Гуглил и нашел!не могли бы комменты поставить По идее так должен выводить! Ввод ...

Stack и указатели c++ - C++
Есть следующий Стэк #ifndef _LINKED_STACK #define _LINKED_STACK #include &quot;StackInterface.h&quot; #include &quot;Node.h&quot; template &lt;...

Создание stack - C++
Выдаёт ошибку на создание стека почему-то. Не могу понять, почему именно. Вот сама ошибка: error C2143: синтаксическая ошибка:...

stack, потоки - C++
Добрый день! Является ли безопасным одновременная работа с stl'ным stack'ом в несколько потоков?


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

Или воспользуйтесь поиском по форуму:
ninja2
230 / 186 / 7
Регистрация: 26.09.2012
Сообщений: 2,018
Завершенные тесты: 1
09.09.2013, 18:03  [ТС]     Stack со сменой представления #52
Цитата Сообщение от ForEveR Посмотреть сообщение
Пробежав глазами главу 25, сложилось ощущение, что наиболее правильным вариантом, будет предложенный ранее с абстрактными классами
Да абстрактные классы сила. Все таки я прав, нужно через абстрактные классы делать.
Yandex
Объявления
09.09.2013, 18:03     Stack со сменой представления
Ответ Создать тему
Опции темы

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