Всем привет, сегодня я бы хотел вам рассказать как можно написать свой собственный класс Exception !
Поехали!
Наверное вы спросите - "Зачем нам нужен свой собственный класс Exception если есть стандартный класс std::exception который находится в пространстве имён STD. Свой класс Exception может понадобится для того, что бы ловить исключения было намного удобнее. То есть, как вы все знаете у стандартного класса std::exception есть всего лишь 1 метод, а именно метод what. И когда вы будете обрабатывать исключение, то вам может не хватить возможностей стандартного класса std::exception .
Для этого мы и будем писать свой класс Exception !
Приступим.
Для начала я создам обычный консольный проект и стандартно опишу точку входа и тд.
Дальше я симулирую исключение, для того что бы наглядно показать пример.
Готово, теперь приступим к самому классу и дальнейшей обработке исключения.
Ну а вот тут я хочу сделать небольшую остановочку.
Как видите мы создали класс MyException, где в private доступе находится 1 поле типа string, в public конструктор,деструктор и сам наш метод what, так же я описал функцию где симулировал исключение ( сделано для примера ).
Давайте для начала разберём функцию, она просто выводит число которое мы передадим в неё аргументом, но например если мы передадим в эту функцию число равное -1, тогда наша функция например начнёт отрабатывать не правильно. Для этого мы бросаем исключение и уже дальше ловим его в блоке catch.
Теперь немного о классе. Т.к это самый простой пример класса Exception, то мы просто в конструкторе принимаем 1 параметр типа string,
с которым дальше работаем. В самой функции мы точно так же как и с классом std::exception передаем в конструктор нашего класса сообщение об ошибке. Потом в main функции всё так же ловим ссылку на объект типа MyEcxeption и уже дальше обрабатываем его вызвав соответствующий этому метод what для того, что бы узнать, что же пошло не так.
Наверное вы спросите - "А чем же наш класс отличается от стандартного? Ведь у него так же есть 1 метод и всё." с одной стороны вы правы, но , что нам мешает добавить ещё методы в наш класс для того, что бы сделать его удобнее в использовании? Давайте попробуем.
Теперь мы имеем 2 конструктора и можем при необходимости получить код ошибки.
Дальше вы можете создавать свои методы по необходимости, так же это намного удобнее чем мы бы писали 1 огромную строку в стандартном классе std::exception.