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

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

Восстановить пароль Регистрация
 
mrstmf
0 / 0 / 0
Регистрация: 03.07.2012
Сообщений: 22
05.11.2012, 17:42     Перегрузка оператора + #1
Не могу заставить работать перегруженный оператор + в функции CMoveByVector

Point.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
#define POINT_H
 
#include <iostream>
#include <conio.h>
#include <math.h>
using namespace std;
class Point
{
public:
      float x,y;
 
      Point ();
      Point (float a, float b);
      ~Point ();
      
      friend ostream& operator <<(ostream&, Point);
      
      Point& operator = (const Point&);
      Point& operator + (const Point&);
      
      void PChange (float a, float b);
};
 
#endif
Point.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
#include "Point.h"
 
Point::Point () {x=0; y=0;};
Point::Point (float a, float b) {x=a; y=b;};
Point::~Point () {x=0;y=0;};
 
ostream& operator << (ostream& out, Point p)
{
         out<<"("<<p.x<<";"<<p.y<<")";
         return out;
};
 
Point& Point::operator = (const Point &p)
{
       this->x=p.x; this->y=p.y;
       return *this;
};
 
Point& Point::operator + (const Point &p)
{
       this->x=p.x; this->y+=p.y;
       return *this;
};
 
void Point::PChange(float a, float b) {this->x=a; this->y=b;};
circle.h:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include "Point.h"
 
class Circle
{
public:
      Point p(); 
      float r;
     
      Circle();//const without parametrs
      Circle(float a, float b, float c);//const with parametrs
      ~Circle ();//destr
      
      void CMoveByVector (float a, float b);//move circle by vector (0,0)(a,b)
      void CMoveByPoint (float a, float b);//move circle to (a,b)
      void CChange (float c);//change radius of circle
      void CRotate ();//rotate cicrle (r u fucking kidding me?)
};
circle.cpp
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include "circle.h"
#include "Point.cpp"
 
Circle::Circle () {p(); r=0;}
Circle::Circle (float a, float b, float c) {r=c;}
Circle::~Circle () {r=0;}
 
void Circle::CMoveByVector (float a, float b) 
{
     Point t(a,b); 
     p=p+t; 
     cout<<t;
}
void Circle::CMoveByPoint (float a, float b) {/*p.PChange(a,b);*/}
void Circle::CChange (float c) {r=c;};
void Circle::CRotate () {};
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
05.11.2012, 17:42     Перегрузка оператора +
Посмотрите здесь:

C++ Перегрузка оператора ==
перегрузка оператора + C++
C++ Перегрузка оператора >
C++ Перегрузка оператора =
C++ Перегрузка оператора []
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
DiffEreD
 Аватар для DiffEreD
1420 / 757 / 95
Регистрация: 21.06.2011
Сообщений: 1,740
Записей в блоге: 2
05.11.2012, 17:50     Перегрузка оператора + #2
Оператор должен возвращать новый объект. Что-то вроде этого:
C++
1
2
3
4
5
6
7
Point operator + (const Point& p) const
    {
        Point temp;
        temp.x = x + p.x;
        temp.y = y + p.y;
        return temp;
    }
mrstmf
0 / 0 / 0
Регистрация: 03.07.2012
Сообщений: 22
05.11.2012, 18:31  [ТС]     Перегрузка оператора + #3
Цитата Сообщение от yuron_477 Посмотреть сообщение
Оператор должен возвращать новый объект. Что-то вроде этого:
C++
1
2
3
4
5
6
7
Point operator + (const Point& p) const
    {
        Point temp;
        temp.x = x + p.x;
        temp.y = y + p.y;
        return temp;
    }
Не помогло. Та же самая ошибка
no match for 'operator+' in '((Circle*)this)->Circle:: p + t'
Мб проблема в самом вызове сложения? p=p+t;
DiffEreD
 Аватар для DiffEreD
1420 / 757 / 95
Регистрация: 21.06.2011
Сообщений: 1,740
Записей в блоге: 2
05.11.2012, 19:28     Перегрузка оператора + #4
Свалил все в кучу, что увидел, то исправил. У меня компилируется, логику программы не проверял.
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
class Point
{
public:
    Point ();
    Point (const float a, const float b);
 
    friend ostream& operator <<(ostream&, const Point&);
 
    Point operator + (const Point&) const;
 
    void PChange (float a, float b);
private:
    float x,y;
};
 
Point::Point () {x=0; y=0;};
Point::Point (float a, float b) {x=a; y=b;};
 
ostream& operator << (ostream& out, const Point& p)
{
    out<<"("<<p.x<<";"<<p.y<<")";
    return out;
};
 
Point Point::operator + (const Point &p) const
{
    return Point(x + p.x, y + p.y);
};
 
void Point::PChange(float a, float b) {this->x=a; this->y=b;};
 
////////////////////////////////////////////////////////////////////////////////
 
class Circle
{
public:
    Circle();//const without parametrs
    Circle(float a, float b, float c);//const with parametrs
 
    void CMoveByVector (float a, float b);//move circle by vector (0,0)(a,b)
    //void CMoveByPoint (float a, float b);//move circle to (a,b)
    //void CChange (float c);//change radius of circle
    //void CRotate ();//rotate cicrle (r u fucking kidding me?)
private:
    Point p; 
    float r;
};
 
Circle::Circle(): r(0) {}
Circle::Circle (float a, float b, float c): p(a, b), r(c) {}
 
void Circle::CMoveByVector (float a, float b) 
{
    Point t(a,b); 
    p=p+t; 
    cout<<t;
}
//void Circle::CMoveByPoint (float a, float b) {/*p.PChange(a,b);*/}
//void Circle::CChange (float c) {r=c;};
//void Circle::CRotate () {};
Yandex
Объявления
05.11.2012, 19:28     Перегрузка оператора +
Ответ Создать тему
Опции темы

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