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

Классы с обработкой исключений - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Создайте класс Rectangle, представляющий прямоугольник http://www.cyberforum.ru/cpp-beginners/thread1111238.html
Создайте класс Rectangle, представляющий прямоугольник, экземпляры которого обладают четырьмя полями целого типа (x1, y1) (левый верхний угол), (x2, y2) (правый нижний угол). Для данного класса создать три конструктора, которые инициализируют поля следующим образом:  конструктор принимает 4 параметра целого типа и присваивает их значения полям (x1, y1), (x2, y2);  конструктор принимает 2...
C++ Удалить из каждой строчки элемент,более близкий к заданному значению. Добавить строчку в конец матрицы! Жду ваших вариантов,буду очень признателен за помощь:senor: http://www.cyberforum.ru/cpp-beginners/thread1111223.html
C++ Введение до нуля. Нахождение максимального из парных элементов
Прошу о помощи,заранее большое спасибо:-|
C++ Успешное завершение компиляции, но не выводится окно программы
Вот что на выходе: 1>Build succeeded. 1> 1>Time Elapsed 00:00:00.04 ========== Build: 1 succeeded, 0 failed, 2 up-to-date, 0 skipped ========== Но окна так и не видно. В процессах тоже нету.
C++ Warcraft http://www.cyberforum.ru/cpp-beginners/thread1111199.html
Warcraft. Заданное количество юнитов добывают золото равными порциями из одной шахты, задерживаясь в пути на случайное время, до ее истощения. Написать программу работы одного юнита.
C++ Программа завершилась машинным кодом (0x0) #include "stdafx.h" # include <iostream> # include <iomanip> # include <math.h> using namespace std; double xx0, xx1; // промежуток в ответе шагового метода double a = 0.5, b = 1, h = 0.05, e = 0.001; // исходные данные подробнее

Показать сообщение отдельно
Лунна
0 / 0 / 0
Регистрация: 18.08.2012
Сообщений: 7
04.03.2014, 20:20     Классы с обработкой исключений
Помогите, пожалуйста, разобраться с исключениями. Особенно непонятно как создать исключения-наследники от стандартных исключений.
Само задание такое:
Реализовать обработку исключений в трех вариантах:
-использовать подходящие стандартные исключения;
-использовать исключения-наследники от стандартных исключений;
-определить собственные исключения(Это вроде как получилось);
Передачу объекта-исключения выполнить разными способами. Продемонстрировать обработку стандартного исключения bad_exception.

Поле first-целое положительное число, числитель; поле second-целое положительное число, знаменатель. Реализовать метод ipart() - выделение целой части дроби first/second. Метод должен проверять неравенство знаменателя нулю.

Вот то, что у меня получилось:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
#include <iostream>
#include <stdlib.h>
#include <exception>
#include <stdexcept>
using namespace std;
#pragma pack(1)
 
class twice
{
    int first;  int second;
public:
    twice() throw(runtime_error, bad_exception);
    class ZeroDevide {};        // исключение деление на 0
    int ipart() throw (ZeroDevide);
    void Display(int x) const throw();
};
 
void twice::Display(int x) const throw()
{
    cout << "first = " <<first;
    cout << " second = " <<second<<endl;
    cout << "first/second = " <<x<<endl;
}
twice::twice() throw(runtime_error, bad_exception)
{
    cout<<"first:";
    cin.clear();    cin.sync();
    cin>>first;
    if(cin.fail()) throw bad_exception();
    cout<<"second:";
    cin.clear();    cin.sync();
    cin>>second;
    if(cin.fail()) throw bad_exception(); //ошибка ввода
    if (first<0) throw  invalid_argument ("Отрицательный аргумент");
    if (second<0) throw invalid_argument ("Отрицательный аргумент");
}
 
int twice::ipart()  throw (ZeroDevide)
{
    ZeroDevide exeption;
    if (second==0) throw exeption;
    else
        return first / second;
}
 
int main()
{
h:
    try
    {
        class twice x;
        int t=x.ipart();
        x.Display(t);
    }
    catch(twice::ZeroDevide e) //передача исключкеия по значению
    {
        cerr << "\n Делить на 0 нельзя!(исключение ZeroDevide)"<<endl;
        return(1);
    }
    catch(invalid_argument*) //передача по указателю
    {
        cerr << "Допускается ввод только положительных чисел!\n";
        goto h;
    }
    catch(const bad_exception& e) //передача по ссылке
    {
        cerr << "\n Caught "<<e.what()<<endl;  return(0);
    }
    catch(...)
    {
        cerr << "\n Непредвиденная ошибка"<<endl;  return(0);
    }
    return 0;
}
Спасибо!
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 12:27. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru