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

Фотография

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

- - - - - Урок

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

#1
  Ikfakof

Ikfakof
    Пользователь
  • Сообщения:
    33
  • Номер пользователя:
    18
  • Регистрация:
    22-Nov 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-Nov 17
  • Репутация:
    496

 

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


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


    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