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

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

Восстановить пароль Регистрация
 
Костя Хута
0 / 0 / 0
Регистрация: 27.10.2012
Сообщений: 22
01.11.2012, 23:58     Сортировка элементов масива обьектов через перегруженный оператор #1
Всем Добрый вечер. У меня есть класс 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;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
01.11.2012, 23:58     Сортировка элементов масива обьектов через перегруженный оператор
Посмотрите здесь:

Перегруженный оператор ввода C++
C++ перегруженный оператор <<
C++ перегруженный оператор вывода
C++ Перегруженный оператор вывода
C++ Перегруженный оператор
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
I.M.
 Аватар для I.M.
564 / 547 / 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])
Костя Хута
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])
А как тогда правильно огласить массив обьектов? Тут наверно адреса сравниваються
I.M.
 Аватар для I.M.
564 / 547 / 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 сп
    };
Костя Хута
0 / 0 / 0
Регистрация: 27.10.2012
Сообщений: 22
02.11.2012, 09:45  [ТС]     Сортировка элементов масива обьектов через перегруженный оператор #5
Большое спасибо,тема закрыта!
CheshireCat
Эксперт С++
2907 / 1235 / 78
Регистрация: 27.05.2008
Сообщений: 3,307
02.11.2012, 10:52     Сортировка элементов масива обьектов через перегруженный оператор #6
Технически правильно было бы выразить operator>, operator== и operator != через operator<.
Yandex
Объявления
02.11.2012, 10:52     Сортировка элементов масива обьектов через перегруженный оператор
Ответ Создать тему
Опции темы

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