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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Наследование методов C++ - C++
Подскажите, если у меня есть класс, в нём описан метод добавления элемента add_element(int number); который в свою очередь основан на...

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

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
John Prick
774 / 707 / 129
Регистрация: 27.07.2012
Сообщений: 2,026
Завершенные тесты: 3
13.11.2012, 22:59     Перегрузка методов #2
Цитата Сообщение от RubySparks Посмотреть сообщение
вроде бы понимаю принципы ООП, но на практике все глухо...
Ну так попробовали бы начать, а мы бы вас направили по нужной тропе. Вы что-нибудь пробовали писать сами?
RubySparks
0 / 0 / 0
Регистрация: 24.09.2012
Сообщений: 9
13.11.2012, 23:02  [ТС]     Перегрузка методов #3
Да поля класса описала, застряла на массиве обьектов...
John Prick
774 / 707 / 129
Регистрация: 27.07.2012
Сообщений: 2,026
Завершенные тесты: 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
774 / 707 / 129
Регистрация: 27.07.2012
Сообщений: 2,026
Завершенные тесты: 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
774 / 707 / 129
Регистрация: 27.07.2012
Сообщений: 2,026
Завершенные тесты: 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
774 / 707 / 129
Регистрация: 27.07.2012
Сообщений: 2,026
Завершенные тесты: 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
Ушёл с форума.
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
Ушёл с форума.
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++
У меня есть матрица, размеры вплоть до 4000 на 4000, она заполняется, потом у меня есть файл в котором около 50 строк, в каждой строке по 2...

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

Переопределение методов - C++
Как вызвать переопределенный (не перегруженный) метод из производного класса? Base* obj_1 = new Der1; ...

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

Массив методов - C++
Вообщем такая проблемма, стоит задача реализовать меню для задания, это вызывает трудности, я сделал меню которое для функций работает...


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

Или воспользуйтесь поиском по форуму:
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     Перегрузка методов
Ответ Создать тему
Опции темы

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