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

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

Восстановить пароль Регистрация
 
RubySparks
0 / 0 / 0
Регистрация: 24.09.2012
Сообщений: 9
13.11.2012, 22:41     Перегрузка методов #1
Помогите написать программу.

Создать массив объектов, и с помощью методов класса предусмотреть следующие возможности:
• вывод планет в последовательности согласно расстоянию к солнцу;
• поиск планет с наибольшим количеством спутников;
• поиск наибольшего по массе объекта (масса планеты + массы всех спутников).

Класс «Планета» с полями:
• название (public)
• спутники (private)
• диаметр (protected)
• расстояние к Солнцу;
• масса;
• расстояние к спутникам;
• масса спутников.

Перегруженный метод: спутник - с двумя параметрами (номер - целое число, расстояние - действительное число) - возвращает номер спутника, если передано один действительный параметр, возвращает расстояние, если передан целый параметр, устанавливает новое значение расстояния, если передано оба параметра.

Буду очень благодарна, если можна с комментариями, вроде бы понимаю принципы ООП, но на практике все глухо...
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
John Prick
754 / 687 / 123
Регистрация: 27.07.2012
Сообщений: 1,974
Завершенные тесты: 3
13.11.2012, 22:59     Перегрузка методов #2
Цитата Сообщение от RubySparks Посмотреть сообщение
вроде бы понимаю принципы ООП, но на практике все глухо...
Ну так попробовали бы начать, а мы бы вас направили по нужной тропе. Вы что-нибудь пробовали писать сами?
RubySparks
0 / 0 / 0
Регистрация: 24.09.2012
Сообщений: 9
13.11.2012, 23:02  [ТС]     Перегрузка методов #3
Да поля класса описала, застряла на массиве обьектов...
John Prick
754 / 687 / 123
Регистрация: 27.07.2012
Сообщений: 1,974
Завершенные тесты: 3
13.11.2012, 23:06     Перегрузка методов #4
А можно интимную просьбу? Код выложите сюда, пожалуйста.
RubySparks
0 / 0 / 0
Регистрация: 24.09.2012
Сообщений: 9
13.11.2012, 23:16  [ТС]     Перегрузка методов #5
Ту пару строчек? Минутку...

Добавлено через 7 минут
C++
1
2
3
4
5
6
7
8
9
10
11
12
class Planet
{
    private string Sputniki;
    double RastSun;
    double MasSun;
    double RastSput;
    double MasSput;
        
public:
    string NamePlanet; 
    
};
John Prick
754 / 687 / 123
Регистрация: 27.07.2012
Сообщений: 1,974
Завершенные тесты: 3
13.11.2012, 23:30     Перегрузка методов #6
Ну как-то по заданию не очень понятно, что имеется ввиду.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
class Planet
{
private:
    string Sputniki[10];
 
    double RastSun;
    double MasSun;
    double RastSput;
    double MasSput;
    double Diametr;
        
public:
    string NamePlanet; 
};
Но вопросов много.
Что значит:
Цитата Сообщение от RubySparks Посмотреть сообщение
• расстояние к спутникам;
Оно одно для всех спутников? Логично, что разное. Тогда, либо это тоже массив должен быть, либо вообще должен быть отдельный класс Спутник.

Цитата Сообщение от RubySparks Посмотреть сообщение
• поиск планет с наибольшим количеством спутников;
Т.е. число спутников тоже где-то надо хранить. В задании не сказано об этом, не понятно, специально умолчали или надо как-то обойтись без отдельного поля для этого числа.
RubySparks
0 / 0 / 0
Регистрация: 24.09.2012
Сообщений: 9
13.11.2012, 23:44  [ТС]     Перегрузка методов #7
Скорее всего разное, может каждый спутник должен быть обьектом класса Planet?

Добавлено через 8 минут
не string Sputniki[10];, а int - там ведь его номер...

Добавлено через 11 секунд
невнимательная
John Prick
754 / 687 / 123
Регистрация: 27.07.2012
Сообщений: 1,974
Завершенные тесты: 3
13.11.2012, 23:54     Перегрузка методов #8
Цитата Сообщение от RubySparks Посмотреть сообщение
может каждый спутник должен быть обьектом класса Planet?
Может, но тогда их очень криво придётся помещать в класс планеты (через указатели или ещё как-то). В общем, нужно подробнее узнать, что требует задания. Сделать можно разными способами, но пока они либо кривые, что не хочется даже начинать, либо слишком уж академичные по сравнению с корявостью задания.
RubySparks
0 / 0 / 0
Регистрация: 24.09.2012
Сообщений: 9
13.11.2012, 23:56  [ТС]     Перегрузка методов #9
А все же можна кривой способ с указателями? Если не затруднит конечно...
John Prick
754 / 687 / 123
Регистрация: 27.07.2012
Сообщений: 1,974
Завершенные тесты: 3
14.11.2012, 00:00     Перегрузка методов #10
C++
1
2
3
4
class Planet
{
    Planet * sputniki;
};
По ходу выполнения выделить память под нужное количество спутников
C++
1
sputniki = new Planet[10];
А обращаться к ним можно как к элементам массива:
C++
1
sputniki[0].Mass;
taras atavin
Ушёл с форума.
 Аватар для taras atavin
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
14.11.2012, 07:13     Перегрузка методов #11
Цитата Сообщение от RubySparks Посмотреть сообщение
C++
1
2
3
4
5
6
7
8
9
10
class Planet
{
* * private string Sputniki;
* * double RastSun;
* * double MasSun;
* * double RastSput;
* * double MasSput;
public:
* * string NamePlanet; 
};
А где протектед?

Добавлено через 4 минуты
Цитата Сообщение от RubySparks Посмотреть сообщение
Скорее всего разное, может каждый спутник должен быть обьектом класса Planet?
Не может, планетой признаётся только объект на звёздноцентрической (в частном случае гелиоцентрической) орбите, спутник планеты таковым не является.

Добавлено через 3 минуты
Так что это астрономически безграмотно, спутник и планета могут быть только экземплярами разных потомков одного класса. А вот в класс "светило", или "астрообъект" можно снести всё от спутников до самого Солнца.
RubySparks
0 / 0 / 0
Регистрация: 24.09.2012
Сообщений: 9
14.11.2012, 09:41  [ТС]     Перегрузка методов #12
Я уже полностью запуталась, кому не сложно напишите код как вы его видите пожалуйста...
taras atavin
Ушёл с форума.
 Аватар для taras atavin
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
14.11.2012, 09:59     Перегрузка методов #13
Кстати, не перезагрузка, а перегрузка. Перезагрузка - это: резет, пуск->перезагрузить, выключение и повторное включение компа, закрытие и повторная загрузка проги. А переопределение функции - перегрузка. В том числе функции-члена, она же метод-функция (на других языках водятся методы-процедуры, вообще же метод - это подпрограмма-член).
RubySparks
0 / 0 / 0
Регистрация: 24.09.2012
Сообщений: 9
14.11.2012, 11:31  [ТС]     Перегрузка методов #14
Ребят, ну помогите кому не сложно...
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
14.11.2012, 12:56     Перегрузка методов
Еще ссылки по теме:

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

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

Или воспользуйтесь поиском по форуму:
taras atavin
Ушёл с форума.
 Аватар для taras atavin
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
14.11.2012, 12:56     Перегрузка методов #15
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
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
double abs(double x)
{
 if (x<0.0)
 {
  return -x;
 }
 return x;
}
class Satelite
{
 public:
  std::string name;
  double diametr;
  double distance;
  double mass;
};
class Satelites
{
 protected:
  Satelite *data;
  size_t    count;
 public:
  Satelites (int count)
  {
   if (count!=0)
   {
    data=new Satelite [count];
   }
   else
   {
    data=null_ptr;
   }
   this->count=count;
  }
  ~Satelites ()
  {
   if (data)
   {
    delete [] data;
   }
  }
  operator size_t()
  {
   return count;
  }
  Satelite & operator [] (size_t index)
  {
   return *(data+index);
  }
  Satelite & operator [] (double distance)
  {
   Satelite *p;
   Satelite *r;
   double d, m;
   for (p=data+count-1, r=p, m=abs(distance-p->distance); p>=data; --p)
   {
    d=abs(distance-p->distance);
    if (d<e)
    {
     e=d;
     r=p;
    }
   }
   return *r;
  }
  size_t Index (double distance)
  {
   Satelite *p;
   Satelite *r;
   double d, m;
   for (p=data+count-1, r=p, m=abs(distance-p->distance); p>=data; --p)
   {
    d=abs(distance-p->distance);
    if (d<e)
    {
     e=d;
     r=p;
    }
   }
   return r-data;
  }
};
class Planet
{
 public:
  std::string name;
 private:
  Satelites satelites;
 protected:
  double diametr;
 public:
  double SunDistance;
  double mass; 
  size_t SatelitesCount ()
  {
   return (size_t)satelites;
  }
  double SateliteDistance(int index)
  {
   return satelites[index].distance;
  }
  double SateliteMass(size_t index)
  {
   return satelites[index].mass;
  }
  double SateliteMass(double distance)
  {
   return satelites[distance].mass;
  }
  double SatelitesMass()
  {
   size_t i;
   double r=0.0;
   for (i=satelites-1, r; i<satelites; --i)
   {
    r+=satelites[distance].mass;
   }
   return r;
  }
  size_t Satelite(double distance)
  {
   return satelites.Index(distance);
  }
  double Satelite(size_t index)
  {
   return satelites[distance].distance;
  }
};
class Planets
{
 protected:
  Satelite *data;
  size_t    count;
 public:
  Planets (int count)
  {
   if (count!=0)
   {
    data=new Planet [count];
   }
   else
   {
    data=null_ptr;
   }
   this->count=count;
  }
  ~Planets ()
  {
   if (data)
   {
    delete [] data;
   }
  }
  operator size_t()
  {
   return count;
  }
  Planet & operator [] (size_t index)
  {
   return *(data+index);
  }
  Planet & operator [] (double SunDistance)
  {
   Planet *p;
   Planet *r;
   double d, m;
   for (p=data+count-1, r=p, m=abs(SunDistance-p->SunDistance); p>=data; --p)
   {
    d=abs(SunDistance-p->SunDistance);
    if (d<e)
    {
     e=d;
     r=p;
    }
   }
   return *r;
  }
  void SortOut()
  {
   Planet **b;
   Planet **p1;
   Planet **p2;
   Planet *t;
   b=new Planet*[count];
   for (p1=b+count-1; p1>=b; --p1)
   {
    *p1=data+(p1-b);
   }
   for (p1=b+count-1; p1>b; --p1)
   {
    for (p2=p1-1; p2>=b; --p2)
    {
     if ((*p2)->SunDistance>(*p1)->SunDistance)
     {
      t=*p1;
      *p1=*p2;
      *p2=t;
     }
    }
   }
   delete [] b;
  }
  for (p1=b+count-1; p1>=b; --p1)
  {
   std::cout<<(**p1)->name;
  }
  size_t MaxSatelites()
  {
   Planet *p;
   Planet *r;
   size_t max;
   for (p=data+count-1, r=p, max=p->SatelitesCount; p>=data; --p)
   {
    if (p->SatelitesCount>max)
    {
     max=p->SatelitesCount;
     r=p;
    }
   }
   return r;
  }
  size_t MaxMass()
  {
   Planet *p;
   Planet *r;
   double max;
   double *mass;
   for (p=data+count-1, r=p, max=p->mass+p->SatelitesMass(); p>=data; --p)
   {
    mass=p->mass+p->SatelitesMass();
    if (mass>max)
    {
     max=mass;
     r=p;
    }
   }
   return r;
  }
};
Добавлено через 54 секунды
Если я вообще правильно понял, что требуется.

Добавлено через 56 секунд
Как должна быть реализована запись протектед и привайт, не сказано.
Yandex
Объявления
14.11.2012, 12:56     Перегрузка методов
Ответ Создать тему
Опции темы

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