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

Наследование классов. Не работает вывод площади - C++

Восстановить пароль Регистрация
 
awashwinter
0 / 0 / 0
Регистрация: 05.10.2015
Сообщений: 16
01.04.2016, 12:26     Наследование классов. Не работает вывод площади #1
Не выводит площадь треугольника. От линии наследуется треугольник. Код прилагается
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
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
#include<iostream>
using namespace std;
class cLine
{ 
protected:
    int x, y, xx, yy;
public:
    cLine();
    cLine(int x1, int y1, int xx1, int yy1);
    ~cLine() { cout << "Distructor cLine" << endl; }
    virtual int get_x()const { return x; }
    virtual int get_y()const { return y; }
    virtual int get_xx()const { return xx; }
    virtual int get_yy()const { return yy; }
    void set_x(int x1) { x = x1; }
    void set_y(int y1) { y = y1; }  
    void set_xx(int xx1) { xx = xx1; }
    void set_yy(int yy1) { yy = yy1; }
    virtual void Show()const;
     double area()const;
};
class cTriangle :public cLine
{
protected:
    int X, Y;
public:
    cTriangle();
    cTriangle(int x1, int y1, int xx1, int yy1, int X1, int Y1);
    ~cTriangle() { cout << "Distructor cTriangle" << endl; };
    virtual int get_X()const { return X; }
    virtual int get_Y()const { return Y; }
    void set_X(int X1) { X = X1; }
    void set_Y(int Y1) { Y = Y1; }
    virtual void Show()const;
     double area()const;
};
class cPrism : public cTriangle
{
protected:
    int H;
public:
    cPrism();
    cPrism(int x1, int y1, int xx1, int yy1, int X1, int Y1, int H1);
    ~cPrism() { cout << "Distructor cTriangle" << endl; };
    virtual int get_H()const { return H; }
    void set_H(int H1) { H = H1; }
    virtual void Show()const;
    double area()const;
};
cLine::cLine()
{
    cout << "x=";
    cin >> x;
    cout << "y=";
    cin >> y;
    cout << "xx=";
    cin >> xx;
    cout << "yy=";
    cin >> yy;
}
cLine::cLine(int x1, int y1, int xx1, int yy1) :x(x1), y(y1), xx(xx1), yy(yy1)
{
    cout << "Constructor" << endl;
}
cTriangle::cTriangle()
{
    cout << "X=";
    cin >> X;
    cout << "Y=";
    cin >> Y;
}
cTriangle::cTriangle(int x1, int y1, int xx1, int yy1, int X1, int Y1) :cLine(x1, y1, xx1, yy1), X(X1), Y(Y1)
{
    cout << "Constructor" << endl;
}
cPrism::cPrism()
{
    cout << "H= " << endl;
    cin >> H;
}
cPrism::cPrism(int x1, int y1, int xx1, int yy1, int X1, int Y1, int H1) :cTriangle(x1, y1, xx1, yy1, X1, Y1), H(H1)
{
    cout << "Constructor" << endl;
}
void cLine::Show()const
{
    cout << "x= " << x << ", y= " << y << ", xx= " << xx << ", yy=" << yy << endl;
    cout <<""<< area() << endl;
}
void cTriangle::Show()const
{
    cLine::Show();
    cout << "X= " << X << ", Y= " << Y << endl;
    cout <<"Area= " <<area()<<endl;
}
void cPrism::Show()const
{
    cTriangle::Show();
    cout << "H= " <<H << endl;
    cout <<"Volume= "<< area()<<endl;
}
double cLine::area()const
{
    return sqrt((x - xx)*(x - xx) + (y - yy)*(y - yy));
}
double cTriangle::area()const
{
    double a, b, c, p;
    a = sqrt((x - xx)*(x - xx) + (y - yy)*(y - yy));
    b = sqrt((X - xx)*(X - xx) + (Y - yy)*(Y - yy));
    c = sqrt((x - X)*(x - X) + (y - Y)*(y - Y));
    p = (a + b + c) / 2;
    return sqrt(p*(p - a)*(p - b)*(p - c));
}
double cPrism::area()const 
{
    double s = cTriangle::area();
    return s*H;
}
int main()
{
    cPrism Q;
    Q.Show();
    system("pause");
    return 0;
}
спасибо
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
01.04.2016, 12:26     Наследование классов. Не работает вывод площади
Посмотрите здесь:

наследование классов C++
наследование классов C++
Наследование классов C++
C++ Наследование классов
C++ Наследование классов
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
meJevin
 Аватар для meJevin
153 / 145 / 56
Регистрация: 18.11.2015
Сообщений: 600
Завершенные тесты: 1
01.04.2016, 12:48     Наследование классов. Не работает вывод площади #2
Ты, по-моему, в конструкторе в мэйне должен какие-то значения указать, нет? Потому что дефолтного у тебя нету, который бы ту же x или y ставил равным чему-то. Получается, они не инициализированы?
zss
Модератор
Эксперт С++
 Аватар для zss
5947 / 5552 / 1784
Регистрация: 18.12.2011
Сообщений: 14,184
Завершенные тесты: 1
01.04.2016, 12:51     Наследование классов. Не работает вывод площади #3
Все выполняется вполне корректно.
С учетом того, что Вам вздумалось это делать для целых чисел, а не для действительных
Наследование классов. Не работает вывод площади
Кстати, мне пришлось добавить функцию
C++
1
2
3
4
double sqrt(int x)
{
    return sqrt((double)x);
}
Т.к. такой у компилятора нет.
zss
Модератор
Эксперт С++
 Аватар для zss
5947 / 5552 / 1784
Регистрация: 18.12.2011
Сообщений: 14,184
Завершенные тесты: 1
01.04.2016, 12:53     Наследование классов. Не работает вывод площади #4
meJevin, Вы плохо знаете формулу Герона
Yandex
Объявления
01.04.2016, 12:53     Наследование классов. Не работает вывод площади
Ответ Создать тему
Опции темы

Текущее время: 12:00. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru