Я долгое время работал с обработкой исключений. Я понял, чтобы заставить его работать, если он работает в функции void, но как мне обрабатывать функции, которые должны возвращать значение. Последние 3 строки в главном разделе, где происходит «проблема». Я нашел эту ссылку раньше, чтобы помочь мне зайти так далеко, но моя обработка исключений должна содержаться внутри структуры класса, поэтому я не могу попробовать/бросить/улавливать в основном. Я хотел бы понять, что происходит. [1]: What type of exception should I throw?C++ Класс, содержащий обработку исключений
Заранее спасибо.
#include <iostream>
#include <exception>
class out_of_range : public std::exception
{
private:
std::string msg;
public:
out_of_range(const std::string msg) : msg(msg){};
~out_of_range(){};
virtual const char * what()
{
return msg.c_str();
}
};
class divide
{
private:
int a;
int * _ptr;
public:
divide(int r): a(r), _ptr(new int[a]) {};
~divide(){ delete[] _ptr; };
int get(int index) const
{
try
{
if (index < 0 || index >= a)
throw out_of_range("Err");
else
return _ptr[index];
}
catch (out_of_range & msg)
{
std::cout << msg.what() << std::endl;
}
}
int &get(int index)
{
try
{
if (index < 0 || index >= a)
throw out_of_range("Err");
else
return _ptr[index];
}
catch (out_of_range & msg)
{
std::cout << msg.what() << std::endl;
}
}
};
int main()
{
divide test(6);
for (int i(0); i < 6; ++i)
{
test.get(i) = i * 3;
std::cout << test.get(i) << std::endl;
}
std::cout << "test.get(10): " << test.get(10) << std::endl;
test.get(3) = test.get(10);
std::cout << "test.get(3): " << test.get(3) << std::endl;
return 0;
}