170 похожих чатов

Как решить такую проблему? Есть разные виды пользователей: User, Moderator,

Admin (наследуются друг от друга). Есть таблица в БД где есть вся информация о каждом пользователе и тип 0 = User, 1 = Moderator, 2 = Admin.
В классе Database не хочу писать три метода, которые будут абсолютно одинаковыми, только вызвать разные конструкторы в конце для разных классов пользователей.

10 ответов

8 просмотров

Либо делаете фабрику, либо весь функционал в одном классе, управляемый типом пользователя

serfcity--fsanitize=undefined,address Автор вопроса
Alexey Petrunyaka
Либо делаете фабрику, либо весь функционал в одном...

Т.е. тип пользователя просто как enum в классе?

serfcity--fsanitize=undefined,address Автор вопроса
Alexey Petrunyaka
Либо делаете фабрику, либо весь функционал в одном...

class User { private: std::string username; public: User(const User&) = default; User& operator=(const User&) = default; User(User&&) = default; User& operator=(User&&) = default; virtual ~User() = default; }; class Moderator : public User { private: std::string some_info_about_moderator; public: Moderator(const Moderator&) = default; Moderator& operator=(const Moderator&) = default; Moderator(Moderator&&) = default; Moderator& operator=(Moderator&&) = default; virtual ~Moderator() = default; virtual ban_user(User&); }; class Admin final : public Moderator { private: std::string some_info; public: Admin(const Admin&) = default; Admin& operator=(const Admin&) = default; Admin(Admin&&) = default; Admin& operator=(Admin&&) = default; ~Admin() = default; ban_user(Moderator&) override; }; Вот какой-то такой код. Я вытаскиваю из БД строчку из таблицы users и только там узнаю, какого типа будет возвращаемый результат. Всегда возвращать User, а потом делать downcast? Как-то криво.

serfcity--fsanitize=undefined,address Автор вопроса
serfcity -fsanitize=undefined,address
class User { private: std::string username; public...

Или просто сделать метод, который достаёт Admin, а get_Moderator() и get_User() будут просто делать return get_Admin() ?

serfcity -fsanitize=undefined,address
Или просто сделать метод, который достаёт Admin, а...

С вашей схемой вам не нужен get_Moderator() и get_Admin(). Сделайте ban_user у User, просто у него он ничего не будет делать или ошибку кидать, и добавьте проверку virtual bool isModerator()/isAdmin() const;.

serfcity--fsanitize=undefined,address Автор вопроса
Alexey Petrunyaka
С вашей схемой вам не нужен get_Moderator() и get_...

" добавьте проверку virtual bool isModerator()/isAdmin() const;" не понял

serfcity -fsanitize=undefined,address
" добавьте проверку virtual bool isModerator()/isA...

А вам точно категории нужны, возможно лучше работать с системой прав?

serfcity -fsanitize=undefined,address
" добавьте проверку virtual bool isModerator()/isA...

На юзере сделайте две этих функции, на модераторе перекройте isModerator, на админе isAdmin перекройте.

Похожие вопросы

Обсуждают сегодня

Привет всем. появился вопрос. Разрабатываю сайт, в данный момент он запущен. Хостинг beget. Добавляю на сайт яндекс метрику с помощью полей client-settings (взято отсюда http...
Andrew
2
я не магистр хаскеля, но разве не может лейзи тип конвертнуться в не-лейзи запросив вычисление содержимого прям при инициализации?
deadgnom32 λ madao
100
а как ловят такое ghci> res <- getPos2 urlt 0 (alist !! 0) 200 ghci> res SearchAtom (Search "www.google.com" "/search?q=" "Haskell") "haskell.org" (SearchTS [(2024-05-06 07:...
Fedor
14
короче сгенерила мне эта штука код на ассемблере: struc string val { common local .value dq .value .value: if ~val eq db val end if db 0 } fo...
Vi Chapmann Chapmann
12
Есть тут те у кого дети есть + 2 работы + в зал ходят + в семейной жизни все хорошо?
Abdul-Aziz M.
13
Всем привет! Массив вводится с клавиатуры, кол-во элементов неизвестно, поэтому я указал arr db 100 dup(?) С нахождением максимума проблем нет, а вот минимум почему-то всегд...
En Vind Av Sorg
11
кто шарит: mattermost отслеживает что ты на пк запускаешь?
Valentin
13
Помогите, пожалуйста, делаю программу для для подсчёта корней квадратного уравнения, знаю, что есть куча недочётов, недоработок, но основная проблема в том, что почему-то при ...
NYC
13
в сях есть множество как в питоне? для удаление дубликатов
Linus
25
Всем привет! Стоит задачка, выбрать из выпадающего списка конкретный цвет. Пока реализовал через активацию контрола списка и выбора несколькими нажатиями стрелки вправо до нуж...
Роман.С
9
Карта сайта