Как бросить своё исключение?

Модераторы: Hawk, Romeo, Absurd, DeeJayC, WinMain

Аватара пользователя
Сионист
Сообщения: 1211
Зарегистрирован: 31 мар 2014, 06:18

Например, в операторе-члене ограниченного массива, выполняющем доступ к элементу этого массива. И как бы получше это исключение обозвать, если оно бросается при доступе к несуществущему элементу? И ещё как потом его поймать?
Писать можно на чём угодно, но зачем же так себя ограничивать? Пиши на c.
Аватара пользователя
somewhere
Сообщения: 1858
Зарегистрирован: 31 авг 2006, 17:14
Откуда: 71 RUS
Контактная информация:

Наверное речь идет о throw
Можно создать свой класс-наследник от std::exception и в catch ловить именно исключения этого класса
It's a long way to the top if you wanna rock'n'roll
Аватара пользователя
Сионист
Сообщения: 1211
Зарегистрирован: 31 мар 2014, 06:18

И как его создать?
Писать можно на чём угодно, но зачем же так себя ограничивать? Пиши на c.
Аватара пользователя
Сионист
Сообщения: 1211
Зарегистрирован: 31 мар 2014, 06:18

somewhere писал(а):Наверное речь идет о throw
Ну да, сроу. Что в него писать?
Писать можно на чём угодно, но зачем же так себя ограничивать? Пиши на c.
Аватара пользователя
Сионист
Сообщения: 1211
Зарегистрирован: 31 мар 2014, 06:18

somewhere писал(а):Наверное речь идет о throw и в catch ловить именно исключения этого класса
Как? Расскажите.
Писать можно на чём угодно, но зачем же так себя ограничивать? Пиши на c.
Аватара пользователя
Romeo
Сообщения: 3126
Зарегистрирован: 02 мар 2004, 17:25
Откуда: Крым, Севастополь
Контактная информация:

Господи, да это же описывается в любой даже самой простой книге по языку. Возьми хоть одну прочти. Неужели не стыдно?

Вот так свой класс-исключение можно сделать:

Код: Выделить всё

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");
     }
     ...
  }
};
Entites should not be multiplied beyond necessity @ William Occam
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.
Аватара пользователя
Оксалайя
Сообщения: 27
Зарегистрирован: 01 сен 2015, 12:12

Сионист писал(а):Как? Расскажите.
Ну как, как...Находите на клавиатуре английскую букву "t", жмёте. Потом находите "h", жмёте. Далее повторите для букв "r", "o", "w". И вуаля - throw готово. Можете переходить к более сложным упражнениям.
Аватара пользователя
Сионист
Сообщения: 1211
Зарегистрирован: 31 мар 2014, 06:18

Слово "throw" мне знакомо. Расскажите об его операнде, операнде cath и как это исключение создать.
Писать можно на чём угодно, но зачем же так себя ограничивать? Пиши на c.
Аватара пользователя
Сионист
Сообщения: 1211
Зарегистрирован: 31 мар 2014, 06:18

Romeo писал(а):Господи, да это же описывается в любой даже самой простой книге по языку. Возьми хоть одну прочти. Неужели не стыдно?
Я их прочитал больше, чем на иной винте влезает.Об исключениях нашёл лишь предельно краткие и предельно же туманные сведения в сводке ключевых слов в конце "теория и практика c++" Гербердта Шилдта.
А вообще, если уж речь зашла об ошибке выхода за границы массива, то есть смысл использовать готовое исключение, которое выбрасывается из вектора в подобных случаях. Исключение имеет название out_of_range.
И "вектор" для этого инкладить?
Писать можно на чём угодно, но зачем же так себя ограничивать? Пиши на c.
Аватара пользователя
Оксалайя
Сообщения: 27
Зарегистрирован: 01 сен 2015, 12:12

Сионист писал(а):Слово "throw" мне знакомо. Расскажите об его операнде, операнде cath и как это исключение создать.

Попробуйте начать с азов. Судя по формулировкам Ваших вопросов, к Страуструпу приступать Вам ещё рано, поэтому посоветую для начала освоить простейшие приёмы поиска информации в интернете. В качестве формулировки запроса подойдёт "С++ для начинающих". Вы удивитесь, но в первом же десятке ссылок Вы сможете почерпнуть массу полезной информации, которая позволит вам не заваливать форум кучей тем с глубокомысленными вопросами, от которых многоуважаемый Ромео (дай ему Великий Бог Машин терпения и сил), наверное, уже все волосы на голове вырвал и переключился на другие части своего тела, обладающие волосяным покровом.
Сионист писал(а):Я их прочитал больше, чем на иной винте влезает.Об исключениях нашёл лишь предельно краткие и предельно же туманные сведения в сводке ключевых слов в конце "теория и практика c++" Гербердта Шилдта.
Просмотрев созданные Вами темы, прихожу к выводу, что Вы до сих пор пользуетесь раритетным винчестером на 3.5 Мб, иного объяснения просто не нахожу.
Ответить