Перейти к содержимому

Фотография

Свой собственный класс Exception

- - - - - Урок

  • Авторизуйтесь для ответа в теме
В теме одно сообщение

#1
  Ikfakof

Ikfakof
    Пользователь
  • Сообщения:
    33
  • Номер пользователя:
    18
  • Регистрация:
    22-ноя 17
  • Репутация:
    55

Всем привет, сегодня я бы хотел вам рассказать как можно написать свой собственный класс 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.


  • SID и liebreich это нравится

#2
  SID

SID
    Администратор
  • Сообщения:
    551
  • Номер пользователя:
    3
  • Регистрация:
    20-ноя 17
  • Репутация:
    499

 

Всем привет, сегодня я бы хотел вам рассказать как можно написать свой собственный класс 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.

 

Молодец.Я твой фанат :burumburum:


  • Ikfakof это нравится




Темы с аналогичными тегами: Урок

Количество пользователей, читающих эту тему: 0

0 пользователей, 0 гостей, 0 анонимных


Тему поситили 33 пользователей


    WilliamTox, AmeliaNus, EdithBak, JamesabenI, Olppex, Bradycep, KenleyFisee, GordonTog, DeborahSaige, RobertVopsy, WalterLendy, Aplusecorm, Danielbog, Georgegluts, LucilleScurb, Flazy, Roberttraiz, TimBuildGroup, Normapof, MarusechkaElart, Marvinwrigo, AlexSlody, Ikfakof, Bulb4, DarkD, SLord, STRIPEDTIGER, liebreich, SID, Pastershim, _HacksGaming_, NoName, MS_CHESTER