// xdist2.cpp // исключения с аргументами #include #include using namespace std; /////////////////////////////////////////////////////////// class Distance //класс английских расстояний { private: int feet; float inches; public: //--------------------------------------------------------- class InchesEx //класс исключений { public: string origin; //для имени функции float iValue; //для хранения ошибочного //значения InchesEx(string or, float in) //конструктор с //двумя аргументами { origin = or; //сохраненная строка //с именем виновника ошибки iValue = in; //сохраненное неправильно //значение дюймов } }; //конец класса исключений //--------------------------------------------------------- Distance() //конструктор (без аргументов) { feet = 0; inches = 0.0; } //--------------------------------------------------------- Distance(int ft, float in) //конструктор (2 аргумента) { if(in >= 12.0) throw InchesEx("Конструктор с двумя аргументами", in); feet = ft; inches = in; } //--------------------------------------------------------- void getdist() //получить данные от пользователя { cout << "\nВведите футы: "; cin >> feet; cout << "Введите дюймы: "; cin >> inches; if(inches >= 12.0) throw InchesEx("функция getdist()", inches); } //--------------------------------------------------------- void showdist() //вывести расстояние { cout << feet << "\'-" << inches << '\"'; } }; /////////////////////////////////////////////////////////// int main() { try { Distance dist1(17, 3.5); //конструктор с двумя //аргументами Distance dist2; //конструктор без аргументов dist2.getdist(); //получить значение //вывести расстояния cout << "\ndist1 = "; dist1.showdist(); cout << "\ndist2 = "; dist2.showdist(); } catch(Distance::InchesEx ix) //обработчик ошибок { cout << "\nОшибка инициализации. Виновник: " << ix.origin << ".\n Введенное значение дюймов " << ix.iValue << " слишком большое."; } cout << endl; return 0; }