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

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

Войти
Регистрация
Восстановить пароль
 
ramarren14
2 / 2 / 0
Регистрация: 14.07.2011
Сообщений: 49
#1

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

16.11.2011, 19:07. Просмотров 590. Ответов 9
Метки нет (Все метки)

Упражняюсь в программировании. Написал абстрактный класс Shape, от которого наследуются Quadr и Treyg. Создал класс исключения Exeption, причем если в нем не описывать переменные члены, а просто в блоке catsh написать cout<<" error ", то сообщение выводится на экран. Но как только описал переменную itsVal и вызвал метод в catsh, cразу выдает, что функции недоступны.

Вот класс Quadr:
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
#ifndef QUADR_H
#define QUADR_H
#include "Point.h"
#include "Shapex.h"
 
class Exeption
{
    Exeption():itsValue(0) {}
    Exeption(int val):itsValue(val) {}
    ~Exeption() {}
    int GetValue() const {return itsValue;}
protected:
    int itsValue;
};
 
class Quadr:public Shapex
{
public:
    friend class Point;
    Quadr();
    Quadr(double,double,double,double,double,double,double,double);
    virtual ~Quadr();
    double LenDiagOne() const;
    double LenDiagTwo() const;
    virtual double GetArea() const;
    virtual double GetPer() const;
private:
    Point a,b,c,d;
};
 
#endif
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
#include "Quadr.h"
#include "Point.h"
#include<iostream>
 
Quadr::Quadr():
a(0,0),
b(0,0),
c(0,0),
d(0,0)
{}
 
Quadr::Quadr(double i,double u,double y,double t,double r,double e,double w,double q):
a(i,u),
b(y,t),
c(r,e),
d(w,q)
{}
 
Quadr::~Quadr()
{}
 
double Quadr::LenDiagOne() const
{
    return a.Len(c);
}
 
double Quadr::LenDiagTwo() const
{
    return b.Len(d);
}
 
double Quadr::GetArea() const
{
    double p_half;
    double area_tr_one; 
    double area_tr_two;
    p_half=0.5*(a.Len(b)+b.Len(c)+c.Len(a));
    area_tr_one=sqrt(p_half*(p_half-a.Len(b))*(p_half-a.Len(d))*(p_half-b.Len(d)));
    area_tr_two=sqrt(p_half*(p_half-b.Len(c))*(p_half-c.Len(d))*(p_half-b.Len(d)));
    return area_tr_one+area_tr_two;
}
 
double Quadr::GetPer() const
{
    if ((a.Len(b)+b.Len(c)+c.Len(d)+d.Len(a))==0)
    throw Exeption();
    return (a.Len(b)+b.Len(c)+c.Len(d)+d.Len(a));
}
Ну и main:
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 "Point.h"
#include "Quadr.h"
#include "Treyg.h"
using namespace std;
 
int main()
{
    Shapex* Ptr=0;
    double (Shapex::*PtrFun) () const=0;
    int choice_one=0;
    int choice_two=0;
 
    cout<<"enter need shape (1)-Quadr (2)-Treyg:";
 
    cin>>choice_one;
    switch(choice_one)
    {
        case 1: 
            Ptr=new Quadr(0,0,0,0,0,0,0,0); 
            break;
        case 2:
            Ptr=new Treyg(0,0,0,1,1,0); 
            break;
        default: cout<<" error ";
    }
 
    cout<<"choose function (1)-Area (2)-Perimetr";
 
    cin>>choice_two;
    switch(choice_two)
    {
    case 1:
        PtrFun=&Shapex::GetArea; break;
    case 2:
        PtrFun=&Shapex::GetPer; break;
    default: cout<<" error ";
    }
 
    try
    {
    cout<<(Ptr->*PtrFun) ();
    }
 
    catch(const Exeption & the_Exept)
    {
        cout<<the_Exept.GetValue();
    }
 
    delete Ptr;
    Ptr=0;
    return 0;
}
Кто может указать на ошибки.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
16.11.2011, 19:07
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Исключения (C++):

Исключения С++ - C++
С++. Перечитал уже много учебников, видел много примеров, но никак не пойму как пользоваться блоками try catch.. Может хоть кто-нибудь...

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

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

Исключения - C++
Как бросить исключение выхода за границы массива? Как его поймать? Что делать после отбрасывания? TItem &amp; TArray::operator (unsigned...

исключения - C++
пожалуйста, gомогите решить задачу на с++ , кoтoрая пoкaзывaет, чтo функция co cвoим блoкoм try не дoлжна пeрeхватывaть кaждую вoзмoжную...

исключения - C++
Есть тестовое задание. Реализовать класс. Есть метод. * @note The function does not validate the index, if the index is out ...

9
ForEveR
В астрале
Эксперт С++
7983 / 4742 / 321
Регистрация: 24.06.2010
Сообщений: 10,545
Завершенные тесты: 3
16.11.2011, 19:09 #2
ramarren14, public забыли указать в классе Exeption. И кстати Exception правильно.
0
ramarren14
2 / 2 / 0
Регистрация: 14.07.2011
Сообщений: 49
16.11.2011, 19:26  [ТС] #3
Спасибо. А вообще хорошим стилем считается указывать классы исключений отдельно в Exception.h и Exception.cpp или помещать в какие либо классы?
0
ForEveR
В астрале
Эксперт С++
7983 / 4742 / 321
Регистрация: 24.06.2010
Сообщений: 10,545
Завершенные тесты: 3
16.11.2011, 19:27 #4
ramarren14, Хорошим стилем считается либо юзать стандартные исключения, либо наследоваться от стандартных. А файлы. По сути не важно. Но не в классы точно.
0
Сыроежка
Заблокирован
16.11.2011, 19:29 #5
Цитата Сообщение от ramarren14 Посмотреть сообщение
Спасибо. А вообще хорошим стилем считается указывать классы исключений отдельно в Exception.h и Exception.cpp или помещать в какие либо классы?
Вы все свалили в одну кучу: и файлы и классы!

Естественно определения классов нужно помещать в свой заголовочный файл да к тому же в свое пространство имен!

Что касается файлов .cpp, то они создаются по необходимости, если не все можно объявить и определить в заголовочном файле.
0
ForEveR
В астрале
Эксперт С++
7983 / 4742 / 321
Регистрация: 24.06.2010
Сообщений: 10,545
Завершенные тесты: 3
16.11.2011, 19:35 #6
Сыроежка, Ну если ситуация : есть некий класс, для него есть свой хедер. Нужно исключение по сути специально для этого класса, которое наследуется допустим от std::logic_error и имеет в себе только конструктор - то для чего помещать его в свой хедер? ИМХО абсолютно не имеет резона.
0
Сыроежка
Заблокирован
16.11.2011, 19:50 #7
Цитата Сообщение от ForEveR Посмотреть сообщение
Сыроежка, Ну если ситуация : есть некий класс, для него есть свой хедер. Нужно исключение по сути специально для этого класса, которое наследуется допустим от std::logic_error и имеет в себе только конструктор - то для чего помещать его в свой хедер? ИМХО абсолютно не имеет резона.
Я говорил о классах. А в вашем примере, как я понимаю, класс исключения является вложенным классом другого класса. Так какие проблемы?! Вы ничем не противоречите тому, что я сказал.
Ежели это не вложенные классы, то все равно они должны находиться в одном пространстве имен, так как исключения являются частью интерфейса объявленного класса.
0
ForEveR
В астрале
Эксперт С++
7983 / 4742 / 321
Регистрация: 24.06.2010
Сообщений: 10,545
Завершенные тесты: 3
16.11.2011, 19:53 #8
Сыроежка, Не вложенный. Да в одном спейсе.
Видимо не совсем понял ваше предыдущее сообщение, подумалось, что вы рекомендуете для каждого класса свой хедер.
0
Сыроежка
Заблокирован
16.11.2011, 19:58 #9
Цитата Сообщение от ForEveR Посмотреть сообщение
Сыроежка, Не вложенный. Да в одном спейсе.
Видимо не совсем понял ваше предыдущее сообщение, подумалось, что вы рекомендуете для каждого класса свой хедер.
Я имел в виду не для каждого класса, а для классов, то есть что объявления классво должны быть описаны в заголовочных файлах и желательно в пространстве имен пользователя.
0
ForEveR
В астрале
Эксперт С++
7983 / 4742 / 321
Регистрация: 24.06.2010
Сообщений: 10,545
Завершенные тесты: 3
16.11.2011, 19:59 #10
Сыроежка, Да я собственно уже понял. Извиняюсь.
0
16.11.2011, 19:59
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
16.11.2011, 19:59
Привет! Вот еще темы с ответами:

Исключения - C++
У Эккеля, во втором томе, в главе про исключения, встретил конструкцию такого вида: T&amp; operator(int i) throw(RangeError) { if(i...

исключения - C++
скажите пожалуйстокак написать через исключение if(n&lt;=0 || n&gt;=100000000) { fclose(f); f=fopen(&quot;output.txt&quot;, &quot;w&quot;); ...

Исключения - C++
можно ли возвращаться к выполнению кода после обработки исключения, например try{ func1();//обе ф-и могут вызывать исключение...

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


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

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

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