Страница 1 из 4
Как бросить своё исключение?
Добавлено: 28 авг 2015, 06:54
Сионист
Например, в операторе-члене ограниченного массива, выполняющем доступ к элементу этого массива. И как бы получше это исключение обозвать, если оно бросается при доступе к несуществущему элементу? И ещё как потом его поймать?
Re: Как бросить своё исключение?
Добавлено: 28 авг 2015, 15:19
somewhere
Наверное речь идет о throw
Можно создать свой класс-наследник от std::exception и в catch ловить именно исключения этого класса
Re: Как бросить своё исключение?
Добавлено: 28 авг 2015, 16:42
Сионист
И как его создать?
Re: Как бросить своё исключение?
Добавлено: 28 авг 2015, 16:43
Сионист
somewhere писал(а):Наверное речь идет о throw
Ну да, сроу. Что в него писать?
Re: Как бросить своё исключение?
Добавлено: 28 авг 2015, 16:43
Сионист
somewhere писал(а):Наверное речь идет о throw и в catch ловить именно исключения этого класса
Как? Расскажите.
Re: Как бросить своё исключение?
Добавлено: 01 сен 2015, 12:01
Romeo
Господи, да это же описывается в любой даже самой простой книге по языку. Возьми хоть одну прочти. Неужели не стыдно?
Вот так свой класс-исключение можно сделать:
Код: Выделить всё
class MyException
{
};
...
void F()
{
throw MyException();
}
...
void SomeFunction()
{
try
{
F();
}
catch (const MyException&)
{
std::cout << "My error occured" << std::endl;
}
}
А вообще, если уж речь зашла об ошибке выхода за границы массива, то есть смысл использовать готовое исключение, которое выбрасывается из вектора в подобных случаях. Исключение имеет название out_of_range.
Код: Выделить всё
#include <stdexcept> // std: :o ut_of_range
template <class T>
class MyVector
{
public:
...
T& operator [](int idx)
{
if (idx < 0 || idx >= m_len)
{
throw std: :o ut_of_range("Range error in my vector");
}
...
}
};
Re: Как бросить своё исключение?
Добавлено: 01 сен 2015, 12:16
Оксалайя
Сионист писал(а):Как? Расскажите.
Ну как, как...Находите на клавиатуре английскую букву "t", жмёте. Потом находите "h", жмёте. Далее повторите для букв "r", "o", "w". И вуаля - throw готово. Можете переходить к более сложным упражнениям.
Re: Как бросить своё исключение?
Добавлено: 01 сен 2015, 13:14
Сионист
Слово "throw" мне знакомо. Расскажите об его операнде, операнде cath и как это исключение создать.
Re: Как бросить своё исключение?
Добавлено: 01 сен 2015, 13:18
Сионист
Romeo писал(а):Господи, да это же описывается в любой даже самой простой книге по языку. Возьми хоть одну прочти. Неужели не стыдно?
Я их прочитал больше, чем на иной винте влезает.Об исключениях нашёл лишь предельно краткие и предельно же туманные сведения в сводке ключевых слов в конце "теория и практика c++" Гербердта Шилдта.
А вообще, если уж речь зашла об ошибке выхода за границы массива, то есть смысл использовать готовое исключение, которое выбрасывается из вектора в подобных случаях. Исключение имеет название out_of_range.
И "вектор" для этого инкладить?
Re: Как бросить своё исключение?
Добавлено: 01 сен 2015, 13:37
Оксалайя
Сионист писал(а):Слово "throw" мне знакомо. Расскажите об его операнде, операнде cath и как это исключение создать.
Попробуйте начать с азов. Судя по формулировкам Ваших вопросов, к Страуструпу приступать Вам ещё рано, поэтому посоветую для начала освоить простейшие приёмы поиска информации в интернете. В качестве формулировки запроса подойдёт "С++ для начинающих". Вы удивитесь, но в первом же десятке ссылок Вы сможете почерпнуть массу полезной информации, которая позволит вам не заваливать форум кучей тем с глубокомысленными вопросами, от которых многоуважаемый Ромео (дай ему Великий Бог Машин терпения и сил), наверное, уже все волосы на голове вырвал и переключился на другие части своего тела, обладающие волосяным покровом.
Сионист писал(а):Я их прочитал больше, чем на иной винте влезает.Об исключениях нашёл лишь предельно краткие и предельно же туманные сведения в сводке ключевых слов в конце "теория и практика c++" Гербердта Шилдта.
Просмотрев созданные Вами темы, прихожу к выводу, что Вы до сих пор пользуетесь раритетным винчестером на 3.5 Мб, иного объяснения просто не нахожу.