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

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

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

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

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

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

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

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

Перегруженный оператор вывода - C++
Есть базовый класс Точка и его наследник Круг. Как в Круге использовать operator&lt;&lt; для Точки? Надо вывести координаты центра круга ...

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

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

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
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.
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
Большое спасибо,тема закрыта!
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
02.11.2012, 10:52     Сортировка элементов масива обьектов через перегруженный оператор
Еще ссылки по теме:

Перегруженный оператор = в классе String - C++
Перегруженный оператор = почему то не работает, не могу разобраться в чем проблема, вроде все норм. String &amp;String::operator=(const...

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

Не работает перегруженный оператор присваивания - C++
#include &lt;iostream&gt; #include &lt;string&gt; #include &lt;Windows.h&gt; class OutOfBoundsException {}; class MyString { private: unsigned...

Не выполняется перегруженный оператор присваивания - C++
Подскажите пожалуйста, почему ругается компилятор? Я только начал изучать С++ по книге Шилдта, и там написана вот эта программа. В 93...


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

Или воспользуйтесь поиском по форуму:
CheshireCat
Эксперт С++
2892 / 1241 / 78
Регистрация: 27.05.2008
Сообщений: 3,363
02.11.2012, 10:52     Сортировка элементов масива обьектов через перегруженный оператор #6
Технически правильно было бы выразить operator>, operator== и operator != через operator<.
Yandex
Объявления
02.11.2012, 10:52     Сортировка элементов масива обьектов через перегруженный оператор
Ответ Создать тему
Опции темы

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