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

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

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

Сортировка элементов масива обьектов через перегруженный оператор - C++

01.11.2012, 23:58. Просмотров 324. Ответов 5
Метки нет (Все метки)

Всем Добрый вечер. У меня есть класс Planet в main мне нужно создать массив обьектов этого класса. И потом его нужно посортировать по значениям одного из поля обьекта класса. При сортировке не вызываеться мой перегруженный оператор..

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
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
class Planet{
public: string name;
protected: double diameter;
private: int sputniks, number, distance;
public:
    Planet();
    Planet(string n,double dia,int sput,int numb,int dist);
 
 int sputnik(int num, double dist )
{
    this->number=num;
    this->distance=dist;
    return number;
}
 void setNumber(int numb)
 {
    number=numb;
 }
 
  void setDiametr(double diam)
 {
    diameter=diam;
 }
 
double getDiametr()
{
    return diameter;
}
     
double getNumber()
{
    return number;
}
 
double sputnik(double d )
{
    return d;
}
 
void sputnik(int dist)
{
    distance=dist;
}
 
};
 
 
Planet::Planet(string n,double dia,int sput,int numb,int dist)
         {
            name=n;
            diameter=dia;
            sputniks=sput;
            number=numb;
            distance=dist;
         }
 
ostream &operator<<(ostream &stream, Planet obj)
{
    stream<<obj.name<<", ";
    stream<<obj.getDiametr()<<", ";
    stream<<obj.getNumber();
    return stream;
}
 
iostream &operator>>(iostream &stream, Planet obj)
{
    stream>>obj.name;
    
    return stream;
}
 
bool operator <(Planet ob1,Planet ob2)
{
    cout<<"  _______  < ________";
    if(ob1.getNumber()<ob2.getNumber())
    {
        return true;
    }else
        return false;
}
 
bool operator >(Planet ob1,Planet ob2)
{
    cout<<"  _______  > ________";
    if(ob1.getNumber() > ob2.getNumber())
    {
        return true;
    }else
        return false;
}
 
 
bool operator ==(Planet ob1,Planet ob2)
{
    if(ob1.getNumber() == ob2.getNumber() && (ob1.getDiametr() == ob2.getDiametr()) && (ob1.name == ob2.name))
    {
        return true;
    }else
        return false;
}
 
///////////////////////////////////////////////
int _tmain(int argc, _TCHAR* argv[])
{   
    Planet* planets[4]={
    planets[0]=new Planet("Aaaa",34,55,3,3),//3 сп
    planets[1]=new Planet("Baaa",33,34,6,3),//6сп
    planets[2]=new Planet("Ccc",33,34,2,3),//2 сп
    planets[3]=new Planet("Rrr",33,34,5,3),//5 сп
    };
 
    
    for (int i=4-1;i>0;i--)
  {
    for (int j=0;j<i;j++)
      {
 
        if(planets[j] > planets[j+1]) //Почемк то не вызываеться перегруженный оператор
          {
              int tmp=planets[j]->getNumber();
              planets[j]=planets[j+1];
              planets[j+1]->setNumber(tmp);
          }
     }
  }
    
    cout << "Your array after sorting: ";
    for ( int i = 0; i < 4; i ++ ){
        cout << planets[i] << " ";
    } 
 
    
    getch();
    return 0;
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
01.11.2012, 23:58
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Сортировка элементов масива обьектов через перегруженный оператор (C++):

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

Перегруженный оператор - C++
MathClass = Harry; Раньше я думал, что перегрузка - это предоставление оператору функций, которых, он изначально не имел. Что...

перегруженный оператор << - C++
подскажите как перегрузить оператор &lt;&lt; для класса как описать само перегружение friend ostream&amp; operator &lt;&lt; (ostream &amp;c, const...

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

Глобальный перегруженный оператор - C++
Как организовать работу глобального перегруженного оператора &quot;-&quot;, который должен сравнивать 5 массивов(экземпляры класса). Помогите,...

Перегруженный постфиксный оператор ++ - C++
Есть задание: Создать класс &quot;нота&quot;: название, октава, продолжительность звучания. Производные: &quot;звук&quot; (частота) и &quot;изображение&quot;...

5
I.M.
566 / 549 / 5
Регистрация: 16.12.2011
Сообщений: 1,389
02.11.2012, 00:06 #2
Вы сами себя запутали вот этим
C++
1
Planet* planets[4]={
что по-вашему сравнивается тут?
C++
1
if(planets[j] > planets[j+1])
1
Костя Хута
0 / 0 / 0
Регистрация: 27.10.2012
Сообщений: 22
02.11.2012, 00:10  [ТС] #3
Цитата Сообщение от I.M. Посмотреть сообщение
Вы сами себя запутали вот этим
C++
1
Planet* planets[4]={
что по-вашему сравнивается тут?
C++
1
if(planets[j] > planets[j+1])
А как тогда правильно огласить массив обьектов? Тут наверно адреса сравниваються
0
I.M.
566 / 549 / 5
Регистрация: 16.12.2011
Сообщений: 1,389
02.11.2012, 02:03 #4
Да, там действительно сравниваются указатели.
Соответственно, можно написать так:
C++
1
if(*planets[j] > *planets[j+1])
А можно изначально создать массив из объектов, а не из указателей на объекты

Добавлено через 47 секунд
C++
1
2
3
4
5
6
    Planet planets[4]={
        Planet("Aaaa",34,55,3,3),//3 сп
        Planet("Baaa",33,34,6,3),//6сп
        Planet("Ccc",33,34,2,3),//2 сп
        Planet("Rrr",33,34,5,3),//5 сп
    };
1
Костя Хута
0 / 0 / 0
Регистрация: 27.10.2012
Сообщений: 22
02.11.2012, 09:45  [ТС] #5
Большое спасибо,тема закрыта!
0
CheshireCat
Эксперт С++
2896 / 1245 / 78
Регистрация: 27.05.2008
Сообщений: 3,405
02.11.2012, 10:52 #6
Технически правильно было бы выразить operator>, operator== и operator != через operator<.
0
02.11.2012, 10:52
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
02.11.2012, 10:52
Привет! Вот еще темы с ответами:

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

Не вызывается перегруженный оператор - C++
#include&lt;iostream&gt; using namespace std; struct dates { int num; int count; dates *back; dates *forward; }; class...

Перегруженный оператор присваивания - C++
Достаточно информации прочитал, что такое перегруж. оператор присваивания, но не до конца понимаю суть данного вопроса - &quot;в каком месте...

Функции и перегруженный оператор - C++
Помогите реализовать на С++: 1.Определить пользовательский тип данных fraction (дробь), представляющий собой структуру из 2х полей:...


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

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

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