С Новым годом! Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
tramp_1-3
14 / 14 / 1
Регистрация: 13.10.2012
Сообщений: 432
#1

Исключения языка C++ - C++

13.07.2013, 06:47. Просмотров 332. Ответов 3
Метки нет (Все метки)

Задание в книге по программированию выполнил отчасти (всё что нужно уже изменил и оригинал не нужен). Не знаю как сделать так, чтобы catch ( hmeanexcp & excp ) возвращал управление обратно в цикл, это же вроде противоречит самому механизму исключений? catch ( gmeanexcp & excp ) написал правильно и он корректно работает.
Кликните здесь для просмотра всего текста
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
#include <iostream>
#include <exception>
using std :: cout;
using std :: exception;
using std :: cin;
#include <cmath>
class hmeanexcp : public exception {
    public:
        hmeanexcp ( ) : exception ( ) { };
        const char * what ( ) {
            return "Function hmean (): Wrong input, try again.";
        };
};
class gmeanexcp : public exception {
    public:
        gmeanexcp ( ) : exception ( ) { };
        const char * what ( ) {
            return "Function gmean (): Wrong input, exit from cycle.";
        };
};
double hmean ( double a, double b ) throw ( hmeanexcp &  );
double gmean ( double a, double b ) throw ( gmeanexcp &  );
int main ( ) {
    double x, y, z;
    cout << "Enter two numbers: ";
    try {
        while ( cin >> x >> y ) {
            z = hmean ( x, y );
            cout << "Harmonic mean of " << x << " and " << y << " is " << z << "\n";
            cout << "Geometric mean of " << x << " and " << y << " is " << gmean ( x, y ) << "\n";
            cout << "Enter next set of numbers <q to quite>: ";
        };
        
    }
    catch ( gmeanexcp & excp ) {
        cout << excp.what ( ) << "\n";
    }
    //Г·ГІГ® ГЇГЁГ±Г*ГІГј Гў catch ( hmeanexcp & excp )?
    cout << "Bye!\n";
    cin.ignore ( 1 );
    cin.get ( );
    return 0;
};
double hmean ( double a, double b ) throw ( hmeanexcp & ) {
    if ( a == -b ) 
        throw hmeanexcp ( );
    return ( 2.0 * a * b / ( a + b ) );
};
double gmean ( double a, double b ) throw ( gmeanexcp & ) {
    if ( a < 0 || b < 0 )
        throw gmeanexcp ( );
    return sqrt ( a * b );
};
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
13.07.2013, 06:47
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Исключения языка C++ (C++):

По русскому названию языка программирования определить английское название этого языка - C++
Задача на перечисляемый тип P=(ада, бейсик, модула2, лисп, паскаль, пл2, фортран); A=(ada, basic, modula2, lisp, paskal, pl1. fortran);

Выделение в исходном коде программы ключевых слов языка и операторов языка по словарю - C++
Разбор исходного текста на языке программирования. Выделение в исходном коде программы ключевых слов языка и операторов языка по словарю....

Переписать символы с входящего рядка в выходящий, меняя операторы языка паскаль на операторы языка С++ := на =, = на ==, # на != - C++
Переписать символы с входящего рядка в выходящий, меняя операторы языка паскаль на операторы языка С++ := на =, = на ==, # на != Спасибо.

Какая версия языка у языка С++? - C++
Здравствуйте! Собираюсь писать егэ по информатике уже меньше, чем через две недели. Собираюсь писать код на С++. В заданиях пишется,...

Исключения - C++
По каким причинам объявление исключения в catch-обработчике следует делать ссылкой? Что-то не пойму, почему по-обычному нельзя?

Исключения - C++
читаю про исключения, сама концепция понятна, но стоит ли вообще заострять на исключениях своё внимание? например описан класс exception,...

3
nxtech
77 / 59 / 2
Регистрация: 26.06.2013
Сообщений: 198
13.07.2013, 07:11 #2
Перенести блок try..catch внутрь цикла while.
1
tramp_1-3
14 / 14 / 1
Регистрация: 13.10.2012
Сообщений: 432
13.07.2013, 07:20  [ТС] #3
Цитата Сообщение от nxtech Посмотреть сообщение
Перенести блок try..catch внутрь цикла while.
Спасибо, я как всегда упустил самое очевидное решение, тема закрыта.
0
nxtech
77 / 59 / 2
Регистрация: 26.06.2013
Сообщений: 198
13.07.2013, 08:02 #4
В стандартной библиотеке исключения производные от std::exception реализуют примерно так:
C++
1
2
3
4
5
6
7
8
9
[class hmeanexcp : public exception
{
public:
    virtual ~hmeanexcp() throw() {}
    explicit hmeanexcp(std::string msg) : std::exception(), _msg(msg) {}
    virtual const char* what () const throw() {return _msg.c_str();}
private:
    std::string _msg;
};
Что бы передать имя функции можно использовать преопределенный макрос __FUNCTION__ или подобный.
C++
1
2
3
throw hmeanexcp(__FUNCTION__);
// если компилятор не поддерживает __FUNCTION__, то указываем имя непосредственно
throw hmeanexcp("имя_функции");
1
13.07.2013, 08:02
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
13.07.2013, 08:02
Привет! Вот еще темы с ответами:

Исключения - C++
Помогите реализовать класс исключения в данном коде. Задание: Реализуемая функция должна генерировать подходящие исключения. Обработку...

Исключения - C++
Помогите пожалуйста!!! Написал два исключения, но выводит что-то неправильно. Помогите найти ошибки!!! Задание: для функции:...

Исключения - C++
Не совсем понимаю, как действуют исключения, для чего использовать свои классы при отлавливании исключения... Покидайте ссылки на...

Исключения - C++
Надо сделать исключение в программе. У меня есть список. Есть методы добавить в конец списка, в начало списка, удалить елемент который...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.