Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
3 / 3 / 0
Регистрация: 29.07.2016
Сообщений: 206
1

Creator, фабрика классов

27.12.2023, 15:20. Показов 417. Ответов 2
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
#include <iostream>
#include <string>
#include <map>
 
using namespace std;
 
class Foo {
public:
    Foo() {};
    virtual ~Foo() {};
    virtual void render() = 0;
};
 
class abstractFoo : public Foo { // Абстрактный класс для создания объектов типа Foo
public:
    abstractFoo() {};
    virtual ~abstractFoo() {};
    virtual Foo* createFoo() const = 0;
};
 
template <class C>
class FooCreator : public abstractFoo {// Шаблонный класс для создания объекта конкретного класса
public:
    FooCreator() {};
    virtual ~FooCreator() {};
    Foo* createFoo() const { return new C(); };
    void render() { cout << "plug"; };
};
 
class FooFactory {
protected:
    typedef map<string, abstractFoo*>FactoryMap;
    FactoryMap F_map;
public:
    FooFactory() {};
    virtual ~FooFactory() {};
 
    template <class C>
    void push(const string& name) {
        typename FactoryMap::iterator it = F_map.find(name);
        if (it == F_map.end())
            F_map[name] = new FooCreator<C>();
    }
 
    Foo* createFoo(const string& name) {
        typename FactoryMap::iterator it = F_map.find(name);
        if (it != F_map.end())
            return it->second->createFoo();
        return 0;
    }
};
 
class MyFoo : public Foo {
    Foo* createFoo() const {
        return new MyFoo();
    }
    void render() {
        cout << "My_foo";
    }
};
 
int main() {
    FooFactory FF;
    FF.push<MyFoo>("MyFoo");
    Foo* a = FF.createFoo("My_Foo");
    a->render();
    return 0;
}
Здравствуйте, объясните недалекому, работать не хочет. Вызывается исключение.
Миниатюры
Creator, фабрика классов   Creator, фабрика классов  
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
27.12.2023, 15:20
Ответы с готовыми решениями:

Фабрика классов
#include &lt;iostream&gt; using namespace std; class IUnknown { public: virtual void*...

Фабрика обьектов и названия классов
Вопрос следующий: как можно получить название класса в виде строки, ну или как вариант превратить...

Фабрика классов
Всем привет. Изучая COM, набрел на фабрику классов. Я так понял, что фабрика классов, это...

Фабрика классов и TObjectList
Добрый день. Посмотрите, пожалуйста, код. Делал проект в Delphi XE 10.2 Lite (Проект в приложенном...

Фабрика классов: ковариантные возвращаемые типы не поддерживаются в управляемых типах
Добрый день. Имеются 2 интерфейса: 1. IEmployeeAbstractFactory - представляет фабрику;...

2
19409 / 10028 / 2443
Регистрация: 30.01.2014
Сообщений: 17,678
27.12.2023, 15:36 2
Лучший ответ Сообщение было отмечено KirillNSK как решение

Решение

KirillNSK,

C++
1
2
3
4
5
    FF.push<MyFoo>("MyFoo");
    if(Foo* a = FF.createFoo("My_Foo"))
    {
        a->render();
    }
"MyFoo" и "My_Foo" - это разные ключи, поэтому createFoo возвращает nullptr. Если нужно корректное поведение, то необходима проверка.
0
3 / 3 / 0
Регистрация: 29.07.2016
Сообщений: 206
27.12.2023, 15:56  [ТС] 3
)))))Спасибо, который раз мне подсказываете. Невнимательность блин.
0
27.12.2023, 15:56
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
27.12.2023, 15:56
Помогаю со студенческими работами здесь

Определение классов, описание экземпляров классов (объектов). Уровни доступа к членам классов
Разработать класс, моделирующий предметной области, описание которой приведено в Вашему варианте....

Определение классов, описание экземпляров классов (объектов). Уровни доступа к членам классов
Определить класс с именем Dyscyplina, что абстрагирует понятие &quot;Учебная дисциплина&quot; и содержит...

Фабрика
abstract class imageType{ protected $type; function retType() { return $this-&gt;$type; } }...

Фабрика
Добрый день! Помогите понять, когда нужно применять паттерн фабрика. У меня есть несколько типов...

Фабрика Объектов
Здравствуйте, в джаве новичок, сильно не пинайте. В процессе написания лабораторной понадобилось...

Швейная фабрика
РАЗРАБОТКА ПРИЛОЖЕНИЯ В приложении создайте форму (Швейная фабрика) с вкладками. Для отображения...


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru