Что такое объект класса stati c внутри определения класса, и каковы различные способы вызова функции-члена класса stati c? - PullRequest
0 голосов
/ 15 марта 2020

Я нашел похожий код, подобный показанному ниже, и меня смущают две вещи. Первый: возможно ли иметь объект класса внутри определения класса, как в примере ниже в коде 1? Хотя это было невозможно, но, возможно, ключевое слово stati c делает это возможным. Это правильно? что на самом деле здесь происходит?

Во-вторых, я узнал, что мы можем получить доступ к переменным-членам stati c и функциям-членам stati c класса, просто вызвав имя класса и оператор разрешения контекста (и нужный нам член) , Очевидно, способ, описанный в code1, является альтернативным способом сделать это. Итак, в чём же основное отличие (или преимущество) такого подхода? Другими словами, в чем разница между кодом 1 и кодом 2?

//CODE 1
namespace LOGGER {
  class Logger;
}

class LOGGER::Logger {

    void foo(){}
  public:
    static Logger logger;
};

int main()
{
  LOGGER::Logger::logger.foo();
}





//CODE 2
namespace LOGGER {
  class Logger;
}

class LOGGER::Logger {
   public:
    static void foo(){}

};

int main()
{
  LOGGER::Logger::foo();
}
...