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

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

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

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

13.11.2012, 22:41. Просмотров 765. Ответов 14
Метки нет (Все метки)

Помогите написать программу.

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

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

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

Буду очень благодарна, если можна с комментариями, вроде бы понимаю принципы ООП, но на практике все глухо...
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
13.11.2012, 22:41
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Перегрузка методов (C++):

Перегрузка методов класса - C++
Проблема заключается в следующем я не получается правильно сделать задание. Задание:"Для класса реализовать набор операций для работы с...

Наследование и перегрузка методов - C++
Здравствуйте. Пытаюсь выполнить упр. 8 из главы 11 книги Р.Лафоре "ООП в С++", соорудил такое древо классов (картинка в конце поста). Если...

Перегрузка методов класса Прямоугольник - C++
1.Продемонстрировать перегрузку функций-членов класса "Прямоугольник", функция член – "Нарисовать". Различать случаи собственно...

Перегрузка методов и преобразование типов. - C++
Такой вопрос. Есть класс. class MarkMSGProtocol_t : public MarkIO_t { public: MarkMSGProtocol_t(); virtual...

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

Напишите реализацию методов, предоставляющих доступ к данным класса. Отобразите в программе работу этих методов - C++
Реализация методов класса. Напишите реализацию методов, предоставляющих доступ к данным класса. Отобразите в программе...

14
John Prick
830 / 763 / 152
Регистрация: 27.07.2012
Сообщений: 2,176
Завершенные тесты: 3
13.11.2012, 22:59 #2
Цитата Сообщение от RubySparks Посмотреть сообщение
вроде бы понимаю принципы ООП, но на практике все глухо...
Ну так попробовали бы начать, а мы бы вас направили по нужной тропе. Вы что-нибудь пробовали писать сами?
0
RubySparks
0 / 0 / 0
Регистрация: 24.09.2012
Сообщений: 9
13.11.2012, 23:02  [ТС] #3
Да поля класса описала, застряла на массиве обьектов...
0
John Prick
830 / 763 / 152
Регистрация: 27.07.2012
Сообщений: 2,176
Завершенные тесты: 3
13.11.2012, 23:06 #4
А можно интимную просьбу? Код выложите сюда, пожалуйста.
0
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; 
    
};
0
John Prick
830 / 763 / 152
Регистрация: 27.07.2012
Сообщений: 2,176
Завершенные тесты: 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 Посмотреть сообщение
• поиск планет с наибольшим количеством спутников;
Т.е. число спутников тоже где-то надо хранить. В задании не сказано об этом, не понятно, специально умолчали или надо как-то обойтись без отдельного поля для этого числа.
0
RubySparks
0 / 0 / 0
Регистрация: 24.09.2012
Сообщений: 9
13.11.2012, 23:44  [ТС] #7
Скорее всего разное, может каждый спутник должен быть обьектом класса Planet?

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

Добавлено через 11 секунд
невнимательная
0
John Prick
830 / 763 / 152
Регистрация: 27.07.2012
Сообщений: 2,176
Завершенные тесты: 3
13.11.2012, 23:54 #8
Цитата Сообщение от RubySparks Посмотреть сообщение
может каждый спутник должен быть обьектом класса Planet?
Может, но тогда их очень криво придётся помещать в класс планеты (через указатели или ещё как-то). В общем, нужно подробнее узнать, что требует задания. Сделать можно разными способами, но пока они либо кривые, что не хочется даже начинать, либо слишком уж академичные по сравнению с корявостью задания.
0
RubySparks
0 / 0 / 0
Регистрация: 24.09.2012
Сообщений: 9
13.11.2012, 23:56  [ТС] #9
А все же можна кривой способ с указателями? Если не затруднит конечно...
0
John Prick
830 / 763 / 152
Регистрация: 27.07.2012
Сообщений: 2,176
Завершенные тесты: 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;
1
taras atavin
3571 / 1755 / 91
Регистрация: 24.11.2009
Сообщений: 27,567
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 минуты
Так что это астрономически безграмотно, спутник и планета могут быть только экземплярами разных потомков одного класса. А вот в класс "светило", или "астрообъект" можно снести всё от спутников до самого Солнца.
1
RubySparks
0 / 0 / 0
Регистрация: 24.09.2012
Сообщений: 9
14.11.2012, 09:41  [ТС] #12
Я уже полностью запуталась, кому не сложно напишите код как вы его видите пожалуйста...
0
taras atavin
3571 / 1755 / 91
Регистрация: 24.11.2009
Сообщений: 27,567
14.11.2012, 09:59 #13
Кстати, не перезагрузка, а перегрузка. Перезагрузка - это: резет, пуск->перезагрузить, выключение и повторное включение компа, закрытие и повторная загрузка проги. А переопределение функции - перегрузка. В том числе функции-члена, она же метод-функция (на других языках водятся методы-процедуры, вообще же метод - это подпрограмма-член).
0
RubySparks
0 / 0 / 0
Регистрация: 24.09.2012
Сообщений: 9
14.11.2012, 11:31  [ТС] #14
Ребят, ну помогите кому не сложно...
0
taras atavin
3571 / 1755 / 91
Регистрация: 24.11.2009
Сообщений: 27,567
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 секунд
Как должна быть реализована запись протектед и привайт, не сказано.
0
14.11.2012, 12:56
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
14.11.2012, 12:56
Привет! Вот еще темы с ответами:

Перегрузка в виде метода VS Перегрузка в виде функции друг - C++
Привет! Собственно сабж: В каких случаях используется перегрузка в виде метода, а когда в виде функции друг? Добавлено через 4...

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

Создание методов в С++ - C++
Всем привет подскажите можно ли обьвлять методы в С++ что бы они были доступны в файле реализации но не выносить их прототипы в хедер?

Наследование методов - C++
Может мне стоит книжку почитать или получше подумать над структурой, но вопрос вот: Есть у нас древо классов: base &gt; s2 &gt; s3 &gt; s4 &gt; ......


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

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

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