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

Перегрузка операторов - C++

Восстановить пароль Регистрация
 
Brainstubber
0 / 0 / 0
Регистрация: 21.03.2010
Сообщений: 4
21.03.2010, 02:19     Перегрузка операторов #1
Столкнулся с проблемой при написании лабораторной по перегрузке операторов. Задание таково:
описать класс, содержащий координаты отрезка, метод для вычисления длины этого отрезка, перегрузить операторы сложения и умножения и затем применить их в работе с объектами класса.

Код:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
class Otrezok
{
private:
    double x1;
    double y1;
    double x2;
    double y2;
public:
    Otrezok();
    Otrezok(double dx1, double dy1, double dx2, double dy2);
    Otrezok(const Otrezok &);
    ~Otrezok();
    
    friend Otrezok operator+=(const Otrezok& c1, const Otrezok& c2); 
    friend Otrezok operator*(const Otrezok& c1, const Otrezok& c2);
    double Otrezok:: Dlina();
};
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
#include <math.h>
#include "Otrezok.h"
 
Otrezok::Otrezok() {}
 
Otrezok::Otrezok(double dx1, double dy1, double dx2, double dy2)
{
    x1 = dx1;
    y1 = dy1;
    x2 = dx2;
    y2 = dy2;
}
 
Otrezok::Otrezok(const Otrezok &O)
{
    x1 = O.x1;
    y1 = O.y1;
    x2 = O.x2;
    y2 = O.y1;
}
 
double Otrezok:: Dlina()
{
    double d;
    d = sqrt(pow(y2-y1, 2) + pow(x2-x1, 2));
    return d;
}
 
Otrezok& operator+(const Otrezok &c1, const Otrezok &c2)
{
    return Otrezok(c1) + c2;
}
 
Otrezok& operator*(const Otrezok &c1, const Otrezok &c2)
{
    return Otrezok(c1) * c2;
}
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <iostream>
#include <math.h>
#include "Otrezok.h"
using namespace std;
 
void main()
{
    Otrezok *L1 = new Otrezok();
    Otrezok *L2 = new Otrezok(9, 4, 7, -3);
    Otrezok *L3(L2);
 
    cout << "Dlina otrezka L2:" << L2->Dlina() << "\r\n";
    L1 = L3 + L2;
    cout << "Dlina otrezka L1:" << L1->Dlina() << "\r\n";
}
Выдает следующую ошибку: main.cpp(14): error C2110: '+' : cannot add two pointers.
Очень прошу подсказать, в чем я ошибся.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
21.03.2010, 02:19     Перегрузка операторов
Посмотрите здесь:

Перегрузка операторов C++
C++ Перегрузка операторов
Перегрузка операторов С++ C++
C++ перегрузка операторов
Перегрузка операторов C++
Перегрузка операторов с++ C++
Перегрузка операторов C++
Перегрузка операторов C++

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Genius Ignat
1233 / 771 / 44
Регистрация: 16.09.2009
Сообщений: 2,014
21.03.2010, 12:08     Перегрузка операторов #2
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
#include <iostream.h>
#include <math.h>
 
class Otrezok
{
private:
        double x1;
        double y1;
        double x2;
        double y2;
public:
 
        Otrezok();
        Otrezok(double dx1, double dy1, double dx2, double dy2);
        Otrezok(const Otrezok &);
        ~Otrezok();
 
 
       Otrezok operator+(const Otrezok& c); 
       Otrezok operator*(const Otrezok& c);
 
       double Dlina();
 
       void Print_coord(){
       cout<<x1<<' '<<y1<<' '<<x2<<' '<<y2<<'\n';
       }
};
 
Otrezok::Otrezok() {
x1 = 0;
x2 = 0;
y1 = 0;
y2 = 0;
}
Otrezok::~Otrezok() {}
 
 
Otrezok::Otrezok(double dx1, double dy1, double dx2, double dy2)
{
        x1 = dx1;
        y1 = dy1;
        x2 = dx2;
        y2 = dy2;
}
 
 
Otrezok::Otrezok(const Otrezok &O)
{
        x1 = O.x1;
        y1 = O.y1;
        x2 = O.x2;
        y2 = O.y2;
}
 
double Otrezok::Dlina()
{
        double d;
        d = sqrt(pow(y2-y1, 2) + pow(x2-x1, 2));
        return d;
}
 
Otrezok Otrezok::operator+(const Otrezok &c)
{  
       Otrezok obj(*this);
       //Если слаживаться должно не так передалай на свое усмотрение.
       obj.x1 +=c.x1;
       obj.x2 +=c.x2;
       obj.y1 +=c.y1;
       obj.y2 +=c.y2;
       return obj;
        
}
 
Otrezok Otrezok::operator*(const Otrezok &c)
{
       Otrezok obj(*this);
       //Если ужножаться должно не так передалай на свое усмотрение.
       obj.x1 *=c.x1;
       obj.x2 *=c.x2;
       obj.y1 *=c.y1;
       obj.y2 *=c.y2;
       return obj;
}
int main(){
 
        Otrezok L1;
        Otrezok L2(1,2,3,4);
        Otrezok L3  = L1 + L2;
 
        cout << "Dlina otrezka L2:" << L2.Dlina() << "\n";
        L3.Print_coord();
        cout << "Dlina otrezka L3:" << L3.Dlina() << "\n";
return 0;
}
Так же я обнаружил у тебя ляп в реализации конструктора с параметрами.
Совет: с названиями переменных будь повнимательнее.
Пришлось присобачить ещё дополнительную функцию без неё я бы не выяснил ошибки.
Yandex
Объявления
21.03.2010, 12:08     Перегрузка операторов
Ответ Создать тему
Опции темы

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