Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > Вызов метода из подкласса


Автор: devmstr 24.11.2007, 01:00
Есть класс Сlass1, потомок класса ClassParent.
У него есть подкласс SubClass, Ex:
Код

class Class1 : public ClassParent
{
        class SubClass
        {}
}


Как из метода класса SubClass получить доступ к методу СlassParent.
Пробовал объявить нужные методы класса ClassParent static, Не помогло:
Код

ClassParent::Metod(); // ругается

Как лучше всего решить данную проблему?

Автор: marcusmae 24.11.2007, 01:12
Цитата(devmstr @  24.11.2007,  01:00 Найти цитируемый пост)
Как из метода класса SubClass получить доступ к методу СlassParent.


devmstr, сross-reference. Конструкции плюсов допускают взаимное использование классами друг друга (с предописанием). Скажем, Вы можете экземпляр подкласса объявить полем в большом классе, а при инициализации большого класса, передавать в подкласс ссылку на экземпляр большого класса и тем самым получить доступ к его публичным членам. Другой способ : callback или указатель на функцию.

Автор: Fazil6 24.11.2007, 01:34
Цитата(devmstr @  24.11.2007,  01:00 Найти цитируемый пост)
// ругается

как ругается? Может он просто приватный?

Код

class C
{
public:
    static void f(){}
};

class A : public C
{
    class B{
        void f()
        {
            C::f();
        }
    };
};


Добавлено через 50 секунд
Цитата(devmstr @  24.11.2007,  01:00 Найти цитируемый пост)
Как лучше всего решить данную проблему?

проблемы вобщем-то тут нет

Автор: SaDFromSpb 24.11.2007, 13:43
devmstr, В С++ nested класс ничего не знает о классе агрегаторе, поэтому, чтобы пользоваться функционалом, класса С, тебе придется явно параметризовать класс B указателем на конкретный экземпляр A или C.

А вот если статически методы объявить, то да.. Проблем не должно быть... Их откуда угодно вызвать можно.

Автор: devmstr 24.11.2007, 19:43
Спасибо, проблема решилась!

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)