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

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

Войти
Регистрация
Восстановить пароль
 
beg1ns
0 / 0 / 0
Регистрация: 04.04.2013
Сообщений: 13
#1

подскажите как заставить правильно работать программу по реализации класса "треугольник" на C++ - C++

09.04.2013, 23:52. Просмотров 595. Ответов 1
Метки нет (Все метки)

lb_1_oop_sam.h

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
#ifndef lb_1_oop_sam_h
#define lb_1_oop_sam_h
 
//Структура "треугольник"
    class triangle
    {
        struct point
        {
            double x;
            double y;
            
            //конструктор объекта "точка" по умолчанию
            point()
            {
                x=y=0;
            }
        };
        point A;
        point B;
        point C;
        //получение вектора
        void get_Vector(point e,point f,point &v);
        //Функция вычисления длины ребер треугольника
        void get_Length(double &a,double &b,double &c);
    public:
        //перегрузка оператора "==" для класса triangle
        inline bool operator == (const triangle &t1,const triangle &t2);
        //перегрузка оператора "!=" для класса triangle
        inline bool operator != (const triangle &t1,const triangle &t2);
        //структор объекта "треугольник"
        void set_triangle(double x1, double y1, double x2, double y2, double x3, double y3);
        //Функция вычисления периметра
        double get_perimeter();
        //Функция вычисления площади
        double get_area();
        //функция доступа к координатам
        void get_ABC();
        //функция вычисления угла
        void get_angle(double &alph,double &bet,double &gam);
        //функции определение вида треугольника
        bool is_rectangulor();
        bool is_isosceles();
        bool is_equilateral();
        //функции вычисления радиусов вписанной и описанной окружностей
        double get_r();
        double get_R();
    };
#endif
lb_1_oop_sam.cpp
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
#include<iostream>
#include<math.h>
#include"lb_1_oop_sam.h"
//Конструктор объекта "треугольник" по умолчанию
void triangle::set_triangle(double x1, double y1, double x2, double y2, double x3, double y3)
{
    A.x=x1;
    A.y=y1;
    B.x=x2;
    B.y=y2;
    C.x=x3;
    C.y=y3;
}
//перегрузка оператора "==" для класса triangle
    inline bool triangle::operator == (const triangle &t1,const triangle &t2)
        {
            double a1,a2,b1,b2,c1,c2,alph1,alph2,bet1,bet2,gam1,gam2;
            t1.get_Length(a1,b1,c1);
            t2.get_Length(a2,b2,c2);
            t1.get_angle(alph1,bet1,gam1);
            t2.get_angle(alph2,bet2,gam2);
            return (a1==a2)&&(b1==b2)&&(c1==c2)&&(alph1==alph2)&&(bet1==bet2)&&(gam1==gam2);
        }
//перегрузка оператора "!=" для класса triangle
        inline bool operator != (const triangle &t1,const triangle &t2)
        {
            return !(t1==t2);
        }
//получение вектора
void triangle::get_Vector(point e,point f,point &v)
{
    v.x=(f.x-e.x);
    v.y=(f.y-e.y);
}
//Функция вычисления длины ребер треугольника
void triangle::get_Length(double &a,double &b,double &c)
{
    point av,bv,cv;
    get_Vector(A,B,av);
    get_Vector(B,C,bv);
    get_Vector(C,A,cv);
    a=sqrt((pow(av.x,2)+pow(av.y,2)));
    b=sqrt((pow(bv.x,2)+pow(bv.y,2)));
    c=sqrt((pow(cv.x,2)+pow(cv.y,2)));
}
//Функция вычисления периметра
double triangle::get_perimeter()
{
    double a,b,c;
    get_Length(a,b,c);
    double P=0;
    return P=(a+b+c);
}
//Функция вычисления площади
double triangle::get_area()
{
    double a,b,c;
    get_Length(a,b,c);
    double p=0;
    p=(get_perimeter()/2);
    double S=0;
    return S=sqrt((p*(p-a)*(p-b)*(p-c)));
}
//функция доступа к координатам
void triangle::get_ABC()
{
    std::cout<<"A.x="<<A.x<<'\n'<<"A.y="<<A.y<<'\n'<<"B.x="<<B.x<<'\n'<<"B.y="<<B.y<<'\n'<<"C.x="<<C.x<<'\n'<<"C.y="<<C.y<<'\n';
}
//функция вычисления угла
void triangle::get_angle(double &alph,double &bet,double &gam)
{
    double a,b,c;
    get_Length(a,b,c);
    double angle=0;
    point av,bv,cv;
    get_Vector(A,B,av);
    get_Vector(B,C,bv);
    get_Vector(C,A,cv);
    double R=get_R();
    
            //angle=asin(a/(2*R));
            alph=acos(fabs(((bv.x*cv.x)+(bv.y*cv.y))/(b*c)))*180/3.14;
        
            //angle=asin(b/(2*R));
            bet=acos(fabs(((cv.x*av.x)+(cv.y*av.y))/(c*a)))*180/3.14;
        
            gam=acos(fabs(((av.x*bv.x)+(av.y*bv.y))/(a*b)))*180/3.14;
            
}
//функции вычисления радиусов вписанной и описанной окружностей
        double triangle::get_r()
        {
            double P=get_perimeter();
            double pp=P/2;
            double S=get_area();
            double r=S/pp;
            return r;
        }
 
 
        double triangle::get_R()
        {
            double S=get_area();
            double a,b,c;
            get_Length(a,b,c);
            double R=((a*b*c)/(4*S));
            return R;
        }
test_infinity.cpp
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include<iostream>
#include<math.h>
#include"lb_1_oop_sam.h"
 
using namespace std;
 
    void main()
{
    triangle t1;
    t1.set_triangle(1,1,2,2,4,1);
    double p=0;
    p=t1.get_perimeter();
    double alph,bet,gam;
    t1.get_angle(alph,bet,gam);
    t1.get_ABC();
    cout<<"P="<<p<<'\n';
    cout<<"S="<<t1.get_area()<<'\n'<<"R="<<t1.get_R()<<'\n'<<"r="<<t1.get_r()<<'\n';
    cout<<"angle:"<<alph<<'\n'<<bet<<'\n'<<gam<<'\n';
    system("pause");
        
}
программа ругается на перегрузку операторов и некорректно считает углы треугольника
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
------ Построение начато: проект: triangle, Конфигурация: Debug Win32 ------
  test_infinity.cpp
e:\мой файлы\projects\triangle\triangle\lb_1_oop_sam.h(27): error C2804: бинарный "operator ==" имеет слишком много параметров
e:\мой файлы\projects\triangle\triangle\lb_1_oop_sam.h(29): error C2804: бинарный "operator !=" имеет слишком много параметров
  lb_1_oop_sam.cpp
e:\мой файлы\projects\triangle\triangle\lb_1_oop_sam.h(27): error C2804: бинарный "operator ==" имеет слишком много параметров
e:\мой файлы\projects\triangle\triangle\lb_1_oop_sam.h(29): error C2804: бинарный "operator !=" имеет слишком много параметров
e:\мой файлы\projects\triangle\triangle\lb_1_oop_sam.cpp(18): error C2662: triangle::get_Length: невозможно преобразовать указатель "this" из "const triangle" в "triangle &"
          В результате преобразования теряются квалификаторы
e:\мой файлы\projects\triangle\triangle\lb_1_oop_sam.cpp(19): error C2662: triangle::get_Length: невозможно преобразовать указатель "this" из "const triangle" в "triangle &"
          В результате преобразования теряются квалификаторы
e:\мой файлы\projects\triangle\triangle\lb_1_oop_sam.cpp(20): error C2662: triangle::get_angle: невозможно преобразовать указатель "this" из "const triangle" в "triangle &"
          В результате преобразования теряются квалификаторы
e:\мой файлы\projects\triangle\triangle\lb_1_oop_sam.cpp(21): error C2662: triangle::get_angle: невозможно преобразовать указатель "this" из "const triangle" в "triangle &"
          В результате преобразования теряются квалификаторы
e:\мой файлы\projects\triangle\triangle\lb_1_oop_sam.cpp(27): error C2676: бинарный "==": "const triangle" не определяет этот оператор или преобразование к типу приемлемо к встроенному оператору
  Создание кода...
========== Построение: успешно: 0, с ошибками: 1, без изменений: 0, пропущено: 0 ==========
результат(без функций перегрузки)
http://www.cyberforum.ru/attachments/254113d1365520584

помогите исправить
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
09.04.2013, 23:52
Здравствуйте! Я подобрал для вас темы с ответами на вопрос подскажите как заставить правильно работать программу по реализации класса "треугольник" на C++ (C++):

Ошибки "Expression syntax" и "Unreachable code" при реализации класса матриц - C++
Подскажите по коду. #include &lt;iostream.h&gt; #include &lt;math.h&gt; #include &lt;string.h&gt; #include &lt;stdio.h&gt; #include &lt;windows.h&gt; ...

Не работает код. В чём причина? Как "заставить" работать? - C++
Точка входа и т.д. #include &lt;iostream&gt; #include &lt;string&gt; #include &quot;HConsole.h&quot; int main() { HConsole.Write(&quot;Привет&quot;);...

Создать абстрактный класс "Треугольник" и производный - "Равнобедренный треугольник" - C++
Задание Создать абстрактный класс треугольник. Предусмотреть в классе методы проверки существования треугольника, вычисления и вывода...

Базовый класс "многоугольник" и производные классы "треугольник" и "прямоугольник" - C++
Не могу понять как реализовать данное задание. Создать 1 базовый класс и несколько производных.Все небольшие ф-ии сделать встроенными...

Подскажите как перегрузить операторы ">>", "<<" и "=" - C++
Кто знает, подскажите как перегрузить операторы &quot;&gt;&gt;&quot;, &quot;&lt;&lt;&quot; и &quot;=&quot; ?

В зависимости от времени года "весна", "лето", "осень", "зима" определить погоду "тепло", "жарко", "холодно", "очень холодно" - C++
В зависимости от времени года &quot;весна&quot;, &quot;лето&quot;, &quot;осень&quot;, &quot;зима&quot; определить погоду &quot;тепло&quot;, &quot;жарко&quot;, &quot;холодно&quot;, &quot;очень холодно&quot;. Я так...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
PazDim
5 / 5 / 0
Регистрация: 08.08.2011
Сообщений: 93
10.04.2013, 01:02 #2
Насчет оператора сравнения: у них только один параметр . Внутри сравниваются треугольник, переданный в качестве аргумента, с треугольником, доступным по указателю this. Попробуй исправить.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
10.04.2013, 01:02
Привет! Вот еще темы с ответами:

Объяснить что такое "раздельная компиляция", что такое "интерфейс класса" и "реализация класса" на примере - C++
Есть класс, содержащий объекты и конструктор. Конструктор объявляется в одном из cpp файлов(их несколько). Можно ли, как-то, использовать...

Заполнить структуры "Прямоугольник" и "Треугольник" и найти площади и периметры фигур - C++
Доброго времени суток! Начали изучать структуры, сижу над задачкой, да вот не идет она у меня. Нужно создать две структуры : -...

Реализация класса "Студент" и наследование от него класса "Аспирант" - C++
Помогите, пожалуйста! Создать абстрактный базовый класс Person, описывающий обычного человека. Создайте производный класс Student,...

Нужно написать программу, которая будет работать "молча" - C++
ДБРВРМСуток. Здравствуйте. какой тип проекта в С++ выбрать, если стоит необходимость написать программу которая будет выполняться без...


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

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

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