Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
4 / 4 / 1
Регистрация: 17.12.2015
Сообщений: 119
1

Вложенные классы

18.02.2019, 15:37. Просмотров 309. Ответов 2
Метки нет (Все метки)


Как обратится к приватному полю класса(Builder), из вложенных в этот класс(Builder) классов (Component и т.д.)? Там в коде есть комментарии, чтобы понятнее было.

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
class Builder
{
private:
    class Component()
    {
    public:
         virtual foo();
    };
 
    class OtherComponent: public Component
    {
    public:
         virtual foo();
         virtual foo2();
    }
 
     class AnotherComponent: public Component
    {
    public:
         virtual foo();
         virtual foo3();
    }
 
    std::map<std::string, Component*> mComponents;
public:
    Builder();
};
 
Builder::Builder()
{
    mComponents["base"] = new Component();
    mComponents["other"] = new OtherComponent();
    mComponents["another"] = new AnotherComponent();
}
 
// реализация других методов...
 
Builder::AnotherComponent::foo3()
{
/*
здесь нужно достать компонент из Builder::mComponents, как это сделать? 
Допустим нужно вызвать OtherComponent::foo2() через Builder::mComponents.
*/
}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
18.02.2019, 15:37
Ответы с готовыми решениями:

Вложенные классы
class A { private: B b_class; int a; public: A(); }; class B

Вложенные классы
Где можно почитать нормальную информацию о них? Читаю книгу С.Праты там непонятно что(привел внизу...

вложенные классы
Здорова господа! Снова мучаю класс String еще не замучал. Не могу скомпилировать программу с...

Вложенные классы!!
НЕ могу разобраться ка это работает!!! приведите пожалуйста простой пример как это работает с...

__________________
Помогаю в написании студенческих работ здесь.
Записывайтесь на профессиональные курсы C++ разработчиков
2
Мозгоправ
1647 / 965 / 444
Регистрация: 01.10.2018
Сообщений: 2,032
Записей в блоге: 2
18.02.2019, 16:50 2
Видимо как-то так:
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
#include <string>
#include <map>
 
using namespace std;
 
class Builder {
private:
    class Component {
    protected:
        Builder *m_host;
    public:
        Component(Builder *host) : m_host(host) {}
        virtual void foo() {}
    };
 
    class OtherComponent : public Component {
    public:
        OtherComponent(Builder *host) : Component(host) {}
        virtual void foo() override {}
        virtual void foo2() {}
    };
 
    class AnotherComponent : public Component {
    public:
        AnotherComponent(Builder *host) : Component(host) {}
        virtual void foo() override  {}
        virtual void foo3();
    };
 
    std::map<std::string, Component*> mComponents;
public:
    Builder();
};
 
Builder::Builder() {
    mComponents["base"] = new Component(this);
    mComponents["other"] = new OtherComponent(this);
    mComponents["another"] = new AnotherComponent(this);
}
 
// реализация других методов...
 
void Builder::AnotherComponent::foo3() {
    /*
    здесь нужно достать компонент из Builder::mComponents, как это сделать?
    Допустим нужно вызвать OtherComponent::foo2() через Builder::mComponents.
    */
    dynamic_cast<OtherComponent *>(m_host->mComponents["other"])->foo2();
}
 
int main() {
    Builder bld;
    return 0;
}
Но если возникают такие проблемы, это явный признак того, что надо пересмотреть архитектуру.
2
Комп_Оратор)
Эксперт по математике/физике
8640 / 4352 / 592
Регистрация: 04.12.2011
Сообщений: 13,020
Записей в блоге: 16
18.02.2019, 21:58 3
JackLas, чтобы получить доступ к членам Builder можно объявить вложенные классы друзьями, но всё же непонятно, зачем наследнику в иерархии Component знать о других компонентах? Может лучше эту мапу юзать собственнику (Builder)?
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
18.02.2019, 21:58

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь или здесь.

Шаблоны и вложенные классы - синтаксис
Пишу класс бинарного красно черного дерева, решил сделать структуру узла в нем вложенной, но...

Вложенные в друг друга классы
Есть исходный код: class1.h #pragma once #include &quot;class2.h&quot; class class1 { private:...

Перегрузка операция + вложенные классы
Уже второй раз прошу помощи, никто толком не может помочь( Как правильно реализовать операцию...

Композиция двух классов и вложенные классы
Привет, народ! Собственно говоря вот задача. Существуют 2 класса: 1. Создать класс LongLong для...

Вложенные классы. Что за синтаксис такой?
Всем привет! Писал код с вложенным классом, столкнулся с таким синтаксисом: template &lt;typename...

Вложенные классы, пространство имен и инициализация конструктора
ребята, висят эти вопросы. я гуглил. толку мало. объясните пожалуйста #include...


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Опции темы

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