Форум программистов, компьютерный форум, киберфорум
Наши страницы

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

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

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

06.07.2010, 02:12. Просмотров 477. Ответов 6
Метки нет (Все метки)

Исправьте ошибку, неуказанный тип возвращаемого значения, какая я то глупая ошибка, но я не могу понять
На этой строке
Код
point1=point2+5;
Код
#include "stdafx.h"
#include <conio.h>
using namespace std;
class Point{
public:
double x,y;
  };
Point operator+(Point& pt1, Point& pt2){
  Point new_pt;
  new_pt.x=pt1.x+pt2.x;
  new_pt.y=pt1.y+pt2.y;
  return new_pt;
	  }
  int main(){
		Point point1,point2;
  point2.x=2.0;
  point2.y=4.0;
  point1=point2+5;
  return 0;
  }
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
06.07.2010, 02:12
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Перегрузка операторов (C++):

Что такое "перегрузка операторов"? Каковы принципы работы перегруженных операторов и назначение указателя this - C++
Добрый день . Помогите понять принцип работы перегрузки операторов. объясните пожалуйста в зависимости от чего зависит агрумент при...

[c++] Перегрузка операторов - C++
Не работает. #include &lt;conio.h&gt; #include &lt;iostream.h&gt; #pragma argsused struct FazzyNumber { double x; double x1,x2; ...

Перегрузка операторов - C++
Помогите решить задачу на c++ мучаюсь 3 день Перегрузить операторы «==» и «!=» для строк. Оператор «==» возвращает соответственно 1,...

Перегрузка операторов - C++
Доброй ночи! Изучаю перегрузку операторов. Создал класс Дробь, где в качестве данных выступают числитель и знаменатель дроби. ...

Перегрузка операторов - C++
Осуществите перегрузку оператора “+=” так, чтобы при его использовании сумма увеличивалась на 5. Помогите, срочно.

Перегрузка операторов - C++
Пытаюсь написать такой код: char* operator+(char *s1, char *s2) { return &quot;&quot;; } выдаёт ошибку: http://codepad.org/KS8qU8Ml...

6
6a6kin
231 / 101 / 2
Регистрация: 18.04.2010
Сообщений: 294
06.07.2010, 02:45 #2
1. Неправильная перегрузка(я вообще хз, под какими грибами ты писал этот код)
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
#include <conio.h>
#include <iostream>
using namespace std;
////////////////////////////////////////////////////////////////
class Point
{
public:
double x,y;
 
Point() : x(0.0), y(0.0)
{}
Point( double a, double b ) : x(a), y(b)
{}
Point& operator+(Point pt2)const;
};
//-----------------------------------------------------
Point& Point::operator+(Point pt2)const
{
    return Point( x+pt2.x, y+pt2.y );
}
////////////////////////////////////////////////////////////////
void main()
{
  Point point1, point2( 2.0,  4.0 );
  point1.x = 5.0;
  cout << "x: " << (point2 + point1).x << ", y: " << (point2 + point1).y;
 
  _getch();
}
Камменты нужны?
1
ISergey
Maniac
Эксперт С++
1377 / 888 / 54
Регистрация: 02.01.2009
Сообщений: 2,675
Записей в блоге: 1
06.07.2010, 03:38 #3
Цитата Сообщение от 6a6ka Посмотреть сообщение
Неправильная перегрузка(я вообще хз, под какими грибами ты писал этот код)
Ваш код не лучше...
0
Lotles
1 / 1 / 0
Регистрация: 29.12.2009
Сообщений: 167
06.07.2010, 03:44  [ТС] #4
Код
Point() : x(0.0), y(0.0)
{}
Point( double a, double b ) : x(a), y(b)
{}
Point& operator+(Point pt2)const;
};
Для меня подобная запись не знакома, а точнее
Код
 : x(0.0), y(0.0)
И еще мне нужна перегрузка глобальной функцией, а не методом класса
0
ISergey
Maniac
Эксперт С++
1377 / 888 / 54
Регистрация: 02.01.2009
Сообщений: 2,675
Записей в блоге: 1
06.07.2010, 03:51 #5
6a6ka, Проблема здесь..
C++
1
2
3
4
Point& Point::operator+(Point pt2)const
{
    return Point( x+pt2.x, y+pt2.y );
}
И еще мне нужна перегрузка глобальной функцией, а не методом класса
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
#include <iostream>
 
class Point{
 
    friend std::ostream &operator << (std::ostream &lhs, const Point &rhs){
        return lhs << "X: " << rhs.x << " Y: " << rhs.y;
    }
 
    friend Point operator + (const double &lhs, const Point &rhs);
public:
 
    Point(double _x = 0.0, double _y = 0.0): x(_x), y(_y){
    }
 
    Point operator + (const Point &rhs) const{
        return Point(x + rhs.x, y + rhs.y);
    }
 
    Point operator + (const double &rhs) const{
        return Point(x + rhs, y + rhs);
    }
 
    Point &operator += (const Point &rhs) {
        x += rhs.x;
        y += rhs.y;
 
        return *this;
    }
 
    Point &operator += (const double &rhs) {
        x += rhs;
        y += rhs;
 
        return *this;
    }
 
 
private:
    double x;
    double y;
};
 
Point operator + (const double &lhs, const Point &rhs){
    return Point(lhs + rhs.x, lhs + rhs.y);
}
int main()
{
 
    Point a1(1.0, 1.0), a2(2.0, 3.0), a3;
 
    a3 = a1 + a2;
    std::cout << a3 << std::endl;
 
    a3 = a1 + 2.1;
    std::cout << a3 << std::endl;
 
    a3 += 0.3;
    std::cout << a3 << std::endl;
 
    a3 += a2;
    std::cout << a3 << std::endl;
 
    a3 = 10.1 + a1;
    std::cout << a3 << std::endl;
 
    return 0;
}
1
Lotles
1 / 1 / 0
Регистрация: 29.12.2009
Сообщений: 167
06.07.2010, 04:53  [ТС] #6
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include "stdafx.h"
#include <conio.h>
using namespace std;
class Point{
public:
double x,y;
  };
Point operator+(Point& pt1, Point& pt2){
  Point new_pt;
  new_pt.x=pt1.x+pt2.x;
  new_pt.y=pt1.y+pt2.y;
  return new_pt;
          }
  int main(){
                Point point1,point2;
  point2.x=2.0;
  point2.y=4.0;
  point1=point2+5;
  return 0;
  }
Меня уже таращит от компа, во я тупанул , конечно уже почти 2 суток почти не отрываясь сижу
Вот правильный код
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include "stdafx.h"
#include <conio.h>
using namespace std;
class Point{
public:
double x,y;
  };
Point operator+(Point& pt1, int n){
  Point new_pt;
  new_pt.x=pt1.x+n;
  new_pt.y=pt1.y+n;
  return new_pt;
          }
  int main(){
  Point point1,point2;
  point2.x=2.0;
  point2.y=4.0;
  point1=point2+5;
  return 0;
  }
0
6a6kin
231 / 101 / 2
Регистрация: 18.04.2010
Сообщений: 294
06.07.2010, 09:30 #7
Когда выключил комп, понял. Думал, что утром тихо все исправлю))
Ну ошибся на одну амперсанду
0
06.07.2010, 09:30
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
06.07.2010, 09:30
Привет! Вот еще темы с ответами:

Перегрузка операторов - C++
Всем привет. Предположим, что нужно перегрузить оператор вывода &lt;&lt; для какого-то класса, определенного мной. Этот оператор должен выводить...

Перегрузка операторов - C++
Помогите, пожалуйста, решить задачу При создании собственных типов данных с помощью классов наиболее общей операцией является проверка...

Перегрузка операторов - C++
Объясните, пожалуйста, что означает, эта строка? return a != t1.a &amp;&amp; b != t1.b ? 1 : 0; что означает ? 1 : 0; ? Заранее...

Перегрузка операторов - C++
Нужно для класса комплексных чисел перегрузить операторы. Односимвольные определить как дружественные, а двусимвольные, присваивание и...


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

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

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