Вопрос о вложенных классах [локальных и вложенных] - PullRequest
0 голосов
/ 14 июля 2011

У меня есть класс A. Теперь у этого есть метод скажет executeSomething ().По сути, это принимает LINE в качестве входных данных и проверяет, какой это тип LINE, и соответственно разветвляется и выполняет намеченную задачу;

Class A
{
    performSomething( LINE )
    {
      check LINE TYPE
      switch( LINE ) {
      }
    }
};

Теперь меня просят ввести новый внутренний класс для выполнения этой операции в нем.,Теперь вот беда.Я не совсем уверен, что он имеет в виду под этим, или если это действительно имеет какой-то смысл здесь!Но если я решил создать новый класс как LOCAL-класс (класс внутри метода), то я не смогу получить к нему доступ [поскольку локальная автоматическая переменная недоступна]; [я также опубликовал вопрос по этому поводу).

Я также не чувствую, что это можно решить с помощью класса NESTED (класс внутри класса), но я не совсем уверен в этом.

Он также настаивает на том, что LINE будет доступен во вложенном классе, и поэтомуМне не нужно беспокоиться об этом.Но что ломает мне голову, так это то, что эта строка не является переменной экземпляра.Это просто переменная AUtomatic.

Так что, пожалуйста, кто-нибудь укажет мне, если это может быть достигнуто тщательными вложенными классами.

Спасибо, Моанр Паван.

1 Ответ

0 голосов
/ 15 июля 2011

Что ж, пока код немного неправильный.

Например, switch, скорее всего, неправильный подход к полиморфизму.В C ++ мы обычно используем для этого virtual функции, но иногда мы также можем использовать перегрузку функций и / или шаблоны (если фактические типы уже известны во время компиляции).

Во-вторых, для«внутренний» класс, и не ясно, что это значит.Вы можете иметь классы внутри других классов и даже классы внутри функций.Таким образом, синтаксически все будет в порядке:

class A
{
    void performSomething( LINE )
    {
        class B {
            static void performSomething(A* that, LINE) { code };
        };
        B::performSomething(this, LINE);
    }
};

Ваш компилятор примет это, но мы должны спросить: в чем смысл этого?Также обратите внимание, что B::performSomething может получить доступ к членам из A, только если мы явно передадим this.

...