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

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

Войти
Регистрация
Восстановить пароль
 
Pokemon_93
9 / 5 / 1
Регистрация: 19.01.2013
Сообщений: 74
#1

Паттерн декоратор - C++

21.12.2013, 23:37. Просмотров 870. Ответов 2
Метки нет (Все метки)

доброго времени суток уважаемые форумчане, помогите пожалуйста разобраться, где я допустил ошибку?
суть программы в том что бы слова содержащиеся в векторе выводить с использованием обоих декораторов(1 - реверс строки 2 - обрамление слова в скобки '[' ']'), у меня почему то получается так что выводится только с использованием второго декоратора. хотя в дебаге он заходит в первый и кажется что делает все что нужно.
содержимое файлов проекта:
BrachetPrinterDecorator.h
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
#include "IMessagePrinter.h"
#include "iostream"
#include "memory"
#include "string"
class CBrachetPrinterDecorator : public IMessagePrinter
{
    IMessagePrinter* m_component;
public:
    CBrachetPrinterDecorator(IMessagePrinter* component) : m_component(component) {};
 
    void PrintStudents()
    {
        m_component->PrintStudents();
 
        std::string name;
        for (auto i = studentsName.begin(); i != studentsName.end(); i++)
        {
            name = *i;
            std::cout << '[' << name << ']'<< ", ";
        }
        std::cout << "\nbrachet decor\n";
 
    }
    ~CBrachetPrinterDecorator(){};
};
IMessagePrinter.h
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
class IMessagePrinter
{
public:
    
    IMessagePrinter()
    {
        studentsName.emplace_back("valera");
        studentsName.emplace_back("vlad");
        studentsName.emplace_back("masha");
        studentsName.emplace_back("misha");
        studentsName.emplace_back("roma");
    };
    virtual void PrintStudents() = 0;
    ~IMessagePrinter(){};
    std::vector<std::string> studentsName;
MessagePrinter.h
C++
1
2
3
4
5
6
7
8
9
10
#include "IMessagePrinter.h"
#include "string"
#include "iostream"
class MessagePrinter : public IMessagePrinter
{
public:
    MessagePrinter(){};
    virtual void PrintStudents(){};
    ~MessagePrinter(){};
};
CReversePrinterDecorator.h
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
#include "IMessagePrinter.h"
#include "memory"
#include "iostream"
#include "string"
#include "vector"
class CReversePrinterDecorator: public IMessagePrinter
{
    IMessagePrinter* m_component;
public:
    CReversePrinterDecorator(IMessagePrinter* component) : m_component(component) {}
    
    void PrintStudents()
    {
        std::vector<std::string> temp;
 
        for (int i = 0; i != studentsName.size(); i++)
        {
            std::string name = studentsName[i];
            std::reverse(name.begin(), name.end());
            temp.push_back(name);
        }
         m_component->studentsName = temp;
 
        m_component->PrintStudents();
 
        std::cout << "\nreverse decor\n";
 
    }
 
    ~CReversePrinterDecorator(){};
};
и под конец main.cpp
C++
1
2
3
4
5
6
7
8
9
10
11
#include "BrachetPrinterDecorator.h"
#include "ReversePrinterDecorator.h"
#include "IMessagePrinter.h"
#include "MessagePrinter.h"
using namespace std;
int main(void)
{
    IMessagePrinter* rev = new CBrachetPrinterDecorator(new CReversePrinterDecorator(new MessagePrinter()));
    rev->PrintStudents();
    return 0;
}
заранее благодарен за помощь

Добавлено через 4 часа 58 минут
неужели никто не знаком с данным паттерном и не поможет мне?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
21.12.2013, 23:37     Паттерн декоратор
Посмотрите здесь:

Декоратор и умный указатель - C++
пускай у нас есть, например, декоратор - для примера возьмем реализацию с википедии, через shared_ptr. #include &lt;iostream&gt; #include...

Паттерн стратегия - C++
Всем привет! Начал изучать паттерны. Одним из наиболее понятных и интересных мне оказался паттерн Стратегия. Я начитался статей и...

Паттерн Bridge - C++
нужно написать аудиоплеер, используя паттерн Bridge, с помощью которого надо реализовать возможность смены интерфейса. с паттернами я не в...

паттерн и строка C++ - C++
Возникла необходимость производить поиск в строке по паттерну, который может содержать символ '*' и '?'.Например: искать в строке &quot;abcdefg&quot;...

Паттерн Builder - C++
Вот у меня есть код примера реализации паттерна Builder(другие примеры не предлагать). В классе Army надо как-то исправить код так, чтобы...

Паттерн Singleton - C++
Здравствуйте. Например есть класический одиночка и загрузка музыки. Возможно ли сделать загрузку и вопроизведение музыки через класс...

Паттерн Embedded Value - C++
Доброго времени суток, вопрос по паттерну Embedded Value (объединенное свойство). Это тема моей курсовой, нашел про него немного теории, да...

Паттерн Singleton - C++
Мне вот дали такой код как паттерн Singleton: #include &quot;stdafx.h&quot; template &lt;class T&gt; class SingletonS { static int...

Как реализовать паттерн - C++
Как реализовать паттерн с помощью интерфейсов C++

Паттерн Interpreter и грамматика - C++
Может не особо по теме C++, но все же. Столкнулся с некоторой трудностью. Читал про паттерн Interpreter, который, вроде как , служит для...

Singleton. Одиночка. Паттерн - C++
Как реализовать паттерн Singleton на C++? Делаю так: Заголовочный файл: class Play { private: Play(void); ~Play(void);

Паттерн Flyweight (приспособленец) - C++
Здравствуйте я нашел код Паттерн Flyweight (приспособленец) вот он #include &lt;iostream.h&gt; // &quot;Flyweight&quot; class Character { ...


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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
tyg
1 / 0 / 0
Регистрация: 06.02.2015
Сообщений: 6
06.02.2015, 12:59     Паттерн декоратор #2
Хоть сообщение давно устарело, но может кому понадобится.
В классе CBrachetPrinterDecorator
функция m_component->PrintStudents(); вызывается ДО обрамления скобками.
Pokemon_93
9 / 5 / 1
Регистрация: 19.01.2013
Сообщений: 74
06.02.2015, 13:49  [ТС]     Паттерн декоратор #3
Цитата Сообщение от tyg Посмотреть сообщение
Хоть сообщение давно устарело, но может кому понадобится.
В классе CBrachetPrinterDecorator
функция m_component->PrintStudents(); вызывается ДО обрамления скобками.
Именно так, я с этим долго разбирался но все же нашел решение.
Yandex
Объявления
06.02.2015, 13:49     Паттерн декоратор
Ответ Создать тему
Опции темы

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