А теперь вопрос мой:
как можно в объявлении класса (к примеру если оно в отдельном файле) сразу объявить глобальный объект?
|
В объявлении класса глобальный объект - никак. Это бред сам по себе, т.к. глобальный объект предполагает инстанцирование в единственном экземпляре. Хотя с другой стороны, класс может содержать статичный член своего же типа. Так же, в большинстве случаев, глобальная переменная тупо не нужна (например ее делают для какого-то менеджера ресурсов или типа того). Можно (и нужно) юзать синглтон. Тривиальная реализация - закрываем конструктор и деструктор, класс хранит статичный указатель на созданный объект и статичный метод для доступа к нему. Грубо говоря:
class MySingleton
{
private:
static MySingleton * _instance;
private:
MySingleton();
MySingleton(const MySingleton & other);
MySingleton & operator =(const MySingleton & other);
~MySingleton();
public:
static MySingleton * Instance()
{
if(_instance == NULL) _instance = new MySingleton();
return _instance;
}
};
MySingleton * MySingleton::_instance = NULL;
При желании у Александрески довольно подробно расписаны синглтоны. Но не рекомендую открывать его книги пока, моск сгорит.