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

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

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

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

05.11.2012, 17:42. Просмотров 342. Ответов 3
Метки нет (Все метки)

Не могу заставить работать перегруженный оператор + в функции 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++
Есть такой код. class matrix { public: ......; const double* operator(int) const; double* const operator(int); friend...

Перегрузка оператора + - C++
Всем привет, проблема на этот раз такая. Для того, чтобы выучить классы, я пишу некое подобие класса string. Сложность вот в чем. Возникла...

Перегрузка оператора - C++
#include &lt;iostream&gt; class Node { public: char *s; int length; Node * next; public: Node(); Node(char* val) {

Перегрузка оператора new[] - C++
Привет всем, программирую давольно давно, на с++ второй год. Столкнулся с задачей, в которой нужно создать свой класс и корректно в нем...

Перегрузка оператора [] - C++
Есть код перегрузки оператора для получения данных из массива. #include &lt;iostream&gt; class obj { private: int *arr; ...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
DiffEreD
1429 / 766 / 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;
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
05.11.2012, 19:28     Перегрузка оператора +
Еще ссылки по теме:

Перегрузка оператора - C++
Здравствуйте, друзья. Помогите пожалуйста найти ошибку, вернее я знаю где, но пока не понимаю как её исправить: //Добавить в строковый...

Перегрузка оператора [][] - C++
добрый день. имею в классе двумерный массив. подскажите как правильно сделать перегрузку к классу, чтоб при ЭкземлплярКлассa...

Перегрузка оператора '=' - C++
Не давно стал изучать С++ и дошёл до перегрузок операторов, и с книги написал пример, и не могу в полной мере его понять, объясните...

Перегрузка оператора [] - C++
Возможно ли создать два перегруженных оператора индексации, чтобы один из них возвращал l-value, другой r-value? В этом примере в обоих...


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

Или воспользуйтесь поиском по форуму:
DiffEreD
1429 / 766 / 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     Перегрузка оператора +
Ответ Создать тему
Опции темы

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