Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Knjagskij
-4 / 6 / 0
Регистрация: 10.11.2008
Сообщений: 774
Завершенные тесты: 1
#1

Когда нужно использовать исключения - C++

01.12.2015, 11:03. Просмотров 596. Ответов 21
Метки нет (Все метки)

Когда, по вашему, лучше использовать исключения?
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
01.12.2015, 11:03     Когда нужно использовать исключения
Посмотрите здесь:

Объяснить (с примерами) для чего нужен RTTI, как и когда его можно и нужно использовать - C++
доброго времени суток. вопрос такой как я понял RTTI это свойсвто языка С++ которое было добавлено позднее его релиза, что бы...

Когда использовать WinAPI, а когда функции языка? - C++
Не совсем понимаю, когда нужно использовать WinAPI в приложении, а когда функционал самого ЯП (С/С++). Для той же работы с файлами...

Работает ли указатель на базовый класс исключения, когда попадает в блок catch - C++
Работает ли указатель на базовый класс исключения, когда попадает в блок catch так же как обычно? То есть, если есть переопределенные...

Пишем исключения для каждого типа данных, или можно использовать шаблон? - C++
Всем доброго дня. В классе "очередь" я использую шаблон класса и если пользователь захочет допустим ввести не тип int а тип double то мне...

Когда нужно/не нужно возвращать объект при перегрузке присваивания? - C++
Доброго времени суток! Перегрузка присваивания: class alpha { private: int data; public: alpha() // конструктор без...

Когда какой контейнер использовать? - C++
Поделитесь опытом, когда и при каких условиях какой контейнер особенно удобен? Только поменьше абстракции пожалуйста :)

Указатель this - как и когда его использовать - C++
Объясните, зачем нужен указатель this, как его применять в классах, если можно небольшой пример.

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
0x10
2459 / 1631 / 238
Регистрация: 24.11.2012
Сообщений: 4,009
02.12.2015, 16:20     Когда нужно использовать исключения #21
Цитата Сообщение от Knjagskij Посмотреть сообщение
А мы обязательно должны передавать в исключении объект?
Крайне желательно. Объект несет в себе больше информации, чем простой тип. И дело не в том, что в объекте можно сохранить больше данных, а в том, что объекты различимы по типу. В этом случае легко отделимы друг от друга исключения различных библиотек.

Если из библиотечного метода вылетает std::invalid_argument, возможно, это исключение не было предусмотрено автором.
Если же вылетает library_name::SpecificException, то, вероятно, исключение предусмотрено и его нужно обрабатывать не так, как безликий invalid_argument.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
02.12.2015, 17:02     Когда нужно использовать исключения
Еще ссылки по теме:

Когда и где следует использовать механизм исключительных ситуаций? - C++
Вечер добрый, товарищи. Вопрос у меня в общем-то теоретический и, наверное, размытый, общий. Когда и где следует использовать...

Когда и где следует использовать механизм исключительных ситуаций? - C++
Раньше при написании Си подобных программ всегда возвращал из функции число или булеву переменную, чтобы понять статус происходящего (...

Что такое __attribute__((packed)),и когда это стоит использовать? - C++
Читаю чужие исходники,там встречается __attribute__((packed)) и используется в структурах.Я пробовал приписывать это окончание также к...

Нужно на основе ранее созданных массивов A и B создать массив С правилом исключения - C++
нужно на основе ранее созданих масивов A и B Создать масив С правилом исключения то есть масив С должен иметь елементы которих нет в A...

Когда нужно ставить 0.0f в передаче переменной - C++
Давно пишу на DirectX и уже забыл для чего я использую 0.0f (имеется ввиду только буква f после числа с плавающей точкой) Вроде бы чтобы...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
silent_1991
Эксперт С++
4958 / 3034 / 149
Регистрация: 11.11.2009
Сообщений: 7,027
Завершенные тесты: 1
02.12.2015, 17:02     Когда нужно использовать исключения #22
Цитата Сообщение от Knjagskij Посмотреть сообщение
А мы обязательно должны передавать в исключении объект?
Нет, объектом исключения может быть объект любого типа, даже примитивного (int или const char *).
Цитата Сообщение от Knjagskij Посмотреть сообщение
число 10 - это просто параметр для примера, или в нем есть какой-то смысл?
Просто пример. Тот же код возврата, только переданный внутри объекта исключения.
Вообще, весь код - всего лишь крошечный пример. Функция openfile не возвращает ничего, связанного с, собственно, открытым файлом. Класс исключения не наследуется от std::exception и не переопределяет виртуальный метод what. Используются магические числа. Короче говоря, так писать не надо)

Цитата Сообщение от Knjagskij Посмотреть сообщение
Кстати, в ООП, как я понял, я является признаком хорошего тона возвращать значения атрибутов через методы? Или не обязательно, ведь, одно дело, если мы присваиваем им значения и их нужно проверять, а другое, если мы ничем не рискуем (при присвоении значения чему-либо из атрибута этого класса)
Тут есть несколько слоёв в понимании, почему надо работать с полями через интерфейсные методы доступа.
Первый слой: возможно, на значения, которое может принимать поле, накладываются некоторые ограничения. Тогда в сеттере нужно проверять, подходит ли устанавливаемое значение под эти ограничения. А, возможно, поля у нас read-only. Тогда просто не нужно реализовывать сеттеры.
Второй слой: представим, что мы разрабатываем библиотеку. Библиотека популярна, ей пользуются люди, её форкают на гитхабе, в общем, у неё звёздная жизнь). Мы, как хорошие разработчики, постоянно правим баги и добавляем фичи. И вот есть у нас в библиотеке класс... Совсем, как казалось поначалу, простой класса. И мы подумали, что не стоит вносить сложности в виде методов доступа, а просто сделали его поля публичными. И вот на очередной итерации добавления фич наш простой класс стал усложнятся. Добавилась логика, оказалось, что не любые значения полей валидны, и т.д. Кроме того, некоторые поля оказались избыточными, потому что их значения стало возможно вычислить на основе других полей или ещё как-нибудь. Но наша изначальная ошибка в проектировании связала нам руки. Тысячи пользователей нашей библиотеки по всему миру получают и устанавливают значения полей прямым присваиванием, ведь никакого интерфейса предусмотрено не было. И мы уже не можем ничего поменять, иначе куча ПО, которое использует нашу библиотеку, перестанет компилироваться. Предусмотри мы сразу методы доступа, мы бы могли жонглировать кишками класса как угодно.
Пример: стандартный класс std::vector имеет метод size, который, очевидно, возвращает количество элементов в векторе. Однако в реализации стандартной библиотеки, идущей в комплекте с gcc, например, никакого поля _size в векторе нет. Вектор там определяется указателями на начало и конец массива, а размер его равен _end - _start. Если бы разработчики изначально позволили обращаться к размеру вектора непосредственно через поле, то потом не смогли бы уже удалить это поле из класса, и, если им реально понадобилось бы хранить указатель на конец вектора ещё для каких-либо нужд, им пришлось бы добавить такое поле в дополнение у указателю на начало массива и полю size. Таким образом, грамотный дизайн класса изначально в дальнейшем может помочь сэкономить 4 байта
Но оговорюсь, что не нужно впадать в крайности, как, впрочем, и в любом другом деле. Если класс действительно простой и не грозит в дальнейшем усложниться, например, он представляет какой-либо хорошо изученный объект (реальный или абстрактный), то можно обойтись публичными полями. Скажем, класс Точка на двумерной плоскости. Очевидно, никаких ограничений на координаты не накладывается, и в общем случае эти координаты можно изменять. Так зачем лишний код и, потенциально, лишние такты процессора (если вдруг методы не заинлайнятся)?

Добавлено через 1 минуту
0x10, оу, похоже, я не так понял вопрос про объект в исключении... Думал, речь идёт про передачу какого-либо объекта (в данном случае name типа std::string) в объекте исключения...
Yandex
Объявления
02.12.2015, 17:02     Когда нужно использовать исключения
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru