Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Пожалуйста помогите с заданием на С++

Alek Sey Ученик (98), на голосовании 5 месяцев назад
В этой задаче вам предстоит реализовать паттерн прокси.

class IVault {
public:
virtual bool unlock(int password) = 0;
};
class Vault : public IVault {
int password;
public:
Vault(int password): password(password) {};
bool unlock(int pass) override {
return password == pass;
}
};

Перед вами абстрактный класс IVault, а также его наследник Vault.

Вам нужно написать класс прокси:

class Proxy : public IVault {
public:
Proxy(IVault* realObject, int attempts);
bool unlock(int pass) override;
};

В конструкторе передается указатель на объект Vault, а также переменная attempts.
Прокси должен перенаправлять вызовы unlock к реальному объекту, считать количество неудачных
вызовов, а возвращать тот результат, который вернул лежащий под прокси объект Vault. Однако
помимо этого он считает кол-во неудачных попыток(которые привели к false). Если кол-во
неудачных попыток превысило attempts раз, то прокси должен бросить исключение типа
ExceptionAttempts

class ExceptionAttempts : public std::exception {
};

Если у прокси был вызван unlock, который привел к true, или же прокси бросил исключение, это
этим объектом-прокси более не пользуются.

В систему отправляйте код классов ExceptionAttempts и Proxy, а также любой другой код,
который поможет решить задачу.
Голосование за лучший ответ
Несмачный Дмитрий Профи (871) 6 месяцев назад
Да, довольно муторное задание. Насколько я могу судить, вам нужно в вашем объекте proxy создать переменную IVault* m_pObject, которую будете заполнять в конструкторе при создании объекта (Proxy(IVault* realObject, int attempts){m_pObject=realObject; m_iAttempts=attempts;}, а в функции unlock(int pass) сделать обращение к объекту, причем если он ответил неверно, уменьшить счетчик попыток. Когда счетчик досчитал до нуля - возбудить требуемое исключение и как то пометить объект, что его нельзя дальше использовать, например, занулить ссылку на realObject, на который ссылается Proxy. Возможно, перед обнулением нужно освободить память (delete m_pObject), а возможно и нет - это уж как объект создавать будете.
{
if(!m_pObject)return;
if(!(m_pObject->unlock(int pass)))m_iAttempts--;
if(!m_iAttempts){throw std::exception;m_pObject=0;)
}
Думаю, что от вас требуется примерно это...
Похожие вопросы