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, а также любой другой код, который поможет решить задачу.
Гарантия на работу | 1 год |
Средний балл | 4.96 |
Стоимость | Назначаете сами |
Эксперт | Выбираете сами |
Уникальность работы | от 70% |