2015-12-11 2 views
-1

, поэтому у меня есть пользовательский класс, который имеет два подкласса: manager и regular_User, и я хочу, чтобы менеджер был singleton. Может ли кто-нибудь помочь мне, как это сделать? спасибо!Как обычный класс может иметь одноэлементный подкласс в C++

class user{ 
    public: 
    //sth 
    protected: 
    //sth 
}; 

class manager:public user{ //i want this to be singleton 
// 
}; 

class regular_user:public user{ 

}; 
+2

Выполнение этого обычным способом с помощью частного конструктора и публичной статической функции «получить экземпляр»? –

+1

Кроме того, если вы говорите, что 'manager' наследует от' user' (если это то, что вы подразумеваете под «подклассом») в тексте, пожалуйста, покажите, что в коде вы также публикуете. Наличие текста и несоответствия кода несколько путают. –

ответ

1

Хотя я вопрос почему вы хотите manager быть синглтон, вы могли бы достичь чего-то с помощью анонимногоclass (или struct) с одним экземпляром:

struct user { 
    static struct { 
    } manager; 
}; 

Веселый бит выделяет хранилище для анонимного struct, так как вы не знаете его тип! Вам нужно сделать это, иначе вы получите ошибки времени соединения. Но C++ 11 имеет способ. Включить

namespace { 
    decltype(user::manager) user::manager; 
} 

в точности один единица измерения.

1

Прежде всего, чтобы сделать класс Manager подклассом класса User, вам необходимо объявить его чем-то вроде class Manager : public User. Затем, чтобы сделать класс Manager классом Singleton, вы должны гарантировать, что может быть создан только один экземпляр этого класса (один объект). Если вы сделаете все свои переменные-члены класса и функции-члены static, то эти члены будут создаваться только один раз.

+1

, если менеджер наследует пользователя, то по крайней мере те члены, унаследованные от пользователя, не являются статичными в менеджере – user463035818

Смежные вопросы