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

классы - C++

Восстановить пароль Регистрация
 
 
Рейтинг: Рейтинг темы: голосов - 20, средняя оценка - 4.85
Mr. Pyatachok
 Аватар для Mr. Pyatachok
8 / 8 / 0
Регистрация: 30.06.2011
Сообщений: 250
11.08.2011, 14:26     классы #1
Всем привет!
Есть такое задание:
Создайте программу с классом Team, который включает в себя следующие данные об участниках спортивных соревнований: ФИО игрока, игровой номер, возраст, рост, вес.
В класс входят следующие элементы-функции:
конструктор с параметрами,
деструктор,
функция просмотра текущего состояния объектов PRINT();
функция-друг, которая выведет информацию о самом легком спорстмене в команде,
виртуальная функция просмотра текущего объекта print().
Производный класс Inform содержит следующие данные:
разряд спортсмена,
категория (кандидат, мастер и т.д.),
призер (Европа, мир и т.д.),
переопределенную функцию просмотра состояния объектов.
На всякий случай выкидываю код (спссибо модераторам), для ввода нескольких спортсменов,
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
#include <iostream.h>
#include <string>
#include <set.h>
#include <conio.h>
 
class Sportsmen
{
    private:
  string strName;
  string strPatronymic;
  string strSurname;
  int iAge;
  double dGrowth;
  double dWeight;
    public:
  void Name      (const string &n) { strName=n; }
  void Patronymic(const string &p) { strPatronymic=p; }
  void Surname   (const string &s) { strSurname=s; }
  string Name()const       { return strName; }
  string Patronymic()const { return strPatronymic; }
  string Surname()const    { return strSurname; }
  void Age(int a)       { iAge=a; }
  void Growth(double g) { dGrowth=g; }
  void Weight(double w) { dWeight=w; }
  int Age()const       { return iAge; }
  double Growth()const { return dGrowth; }
  double Weight()const { return dWeight; }
};
 
istream &operator>>(istream &ist,Sportsmen &s)
{
  string n,p,sn;
  int a;
  double g,w;
  ist>>n>>p>>sn>>a>>g>>w;
  s.Name(n);
  s.Patronymic(p);
  s.Surname(sn);
  s.Age(a);
  s.Growth(g);
  s.Weight(w);
  return ist;
}
 
ostream &operator<<(ostream &ost,const Sportsmen &s)
{
  ost<<"Name:       "<<s.Name()<<"\n"
     <<"Patronymic: "<<s.Patronymic()<<"\n"
     <<"Surname:    "<<s.Surname()<<"\n"
     <<"Age:        "<<s.Age()<<"\n"
     <<"Growth:     "<<s.Growth()<<"\n"
     <<"Weight:     "<<s.Weight()<<endl;
  return ost;
}
 
struct WeightCompare
{
  bool operator()(const Sportsmen &a,const Sportsmen &b)
  { return a.Weight()<b.Weight(); }
};
 
int main()
{
  Sportsmen s;
  multiset<Sportsmen,WeightCompare>team;
  size_t count;
  cout<<"Number of sportsmens in team: ";
  cin>>count;
  while(count--)
  {
    cout<<"Name Patronymic Surname Age Growth Weight:"<<endl;
    if(!(cin>>s))
    {
      cerr<<"Shit!"<<endl;
      return 1;
    }
    team.insert(s);
  }
  cout<<"\nThe first easiest:\n"<<*(team.begin())<<endl;
  getch();
  return 0;
}
Заранее спасибо, на всякий случай швырну еще черновик
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
#include<iostream.h>
#include<conio.h>
#include<string.h>
 
class Team
{
    private:
  char *Surname;
  char *Name;
  char *Patronymic;
  int age;
  float growth;
  float weight;
 
    public:
  Team(const char *Surname,const char *Name,const char *Patronymic,int age,float growth,float weight);
  void print() const;
  ~Team();
  const char *getSurname()const;
  const char *getName()const;
  const char *getPatronymic()const;
};
 
Team::Team(const char *SURNAME,const char* NAME,const char *PATRONYMIC,int AGE,float GROWTH,float WEIGHT)
{
  Surname=new char[strlen(SURNAME)+1];
  strcpy(Surname,SURNAME);
  Name=new char[strlen(NAME)+1];
  strcpy(Name,NAME);
  Patronymic=new char[strlen(PATRONYMIC)+1];
  strcpy(Patronymic,PATRONYMIC);
  age=AGE;
  growth=GROWTH;
  weight=WEIGHT;
}
 
void Team::print()const
{ cout<<Surname<<' '<<Name<<' '<<Patronymic; }
 
Team::~Team()
{
  delete[]Surname;
  delete[]Name;
  delete[]Patronymic;
}
 
const char *Team::getSurname()const
{ return Surname; }
 
const char *Team::getName()const
{ return Name; }
 
const char *Team::getPatronymic()const
{ return Patronymic; }
 
class Inform:public Team
{
    private:
  int Level_athlete;
  char *Category;
  char *Prizewinner;
    public:
  Inform(const char *SURNAME,const char* NAME,const char *PATRONYMIC,int AGE,float GROWTH,float WEIGHT,
         int LEVEL_ATHLETE,char *CATEGORY,char *PRIZEWINNER):
         Team(SURNAME,NAME,PATRONYMIC,AGE,GROWTH,WEIGHT)
  {
    Level_athlete=LEVEL_ATHLETE;
  }
};
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
11.08.2011, 14:26     классы
Посмотрите здесь:

C++ Классы
Классы C++
C++ Классы
Классы C++
C++ классы с++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
LosAngeles
Заблокирован
12.08.2011, 19:37     классы #21
protected поля-данные - плохо, char* - плохо
класс Inform и наследуется и дружественный по отношению к Team - очень плохо(и бесполезно, тк все данные в Team защищённые, как бы и без френда имеет доступ, это тафтология)
программа написана не в стиле ООП, почему Team содержит это
Цитата Сообщение от Mr. Pyatachok Посмотреть сообщение
char *Surname;
char *Name;
char *Patronymic;
в моём понимание тим переводится как команда, но почему она содержит всего одну фамилию имя и ещё какое то непонятное поле? Но даже если бы это были массивы фамилий и имён всё равно плохо. Возьми за основу мою прогу и доделай чё там нужно по заданию, усовершенствовать эту проблематично и врядли ты её сдашь, даже если она будет как-то работать, слишком много плохого кода
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Mr. Pyatachok
 Аватар для Mr. Pyatachok
8 / 8 / 0
Регистрация: 30.06.2011
Сообщений: 250
12.08.2011, 19:40  [ТС]     классы #22
да в книге просто с char ом все примеры
easybudda
Модератор
Эксперт С++
 Аватар для easybudda
9373 / 5423 / 914
Регистрация: 25.07.2009
Сообщений: 10,423
12.08.2011, 19:53     классы #23
Цитата Сообщение от Mr. Pyatachok Посмотреть сообщение
Граждане, а почему нельзя просто сделать вот так?
А сам хорошо понимаешь, что там в каждой строчке написано?
Цитата Сообщение от Mr. Pyatachok Посмотреть сообщение
да в книге просто с char ом все примеры
Старая книга. Лучше не её читать. Только тему новую не создавай вроде "какую книжку надо прочитать, чтобы моя программа заработала?"
И переведи слово team гуглопереводчиком. Team - это команда, незачем её наследным классом от спортсмена делать (или от чего оно у тебя там)...
LosAngeles
Заблокирован
12.08.2011, 19:53     классы #24
Цитата Сообщение от Mr. Pyatachok Посмотреть сообщение
разряд спортсмена,
категория (кандидат, мастер и т.д.),
призер (Европа, мир и т.д.),
это можно сделать с помощью enum
enum Category { KMS, MS }
например
Mr. Pyatachok
 Аватар для Mr. Pyatachok
8 / 8 / 0
Регистрация: 30.06.2011
Сообщений: 250
12.08.2011, 20:02  [ТС]     классы #25
Немного только понимаю, team понимаю, я просто не понимаю как работает set, мне бы попроще, у меня не такие сильные знания как у Вас, народ, я просто спросил, а можно ли таким образом определить наименьший вес, используя только один класс, а на весь гкод смотреть бестолку))
LosAngeles
Заблокирован
12.08.2011, 20:16     классы #26
да было бы чё понимать
это как обычное множество из дискретной математики, не содержит двух одинаковых элементов, что логично для команды. Нельзя одного чела запихать дважды


добавляет чела в команду
Цитата Сообщение от LosAngeles Посмотреть сообщение
void add(Sportsman const& aSportsman) { team.insert(aSportsman); }
инсерт с английского переводится "вставить"

Цитата Сообщение от LosAngeles Посмотреть сообщение
bool remove(string const& aName, string const& aSurname)
{
return team.erase(Sportsman(aName, aSurname));
}
удаляет, remove переводиться "удалить"

Цитата Сообщение от LosAngeles Посмотреть сообщение
bool find(string const& aName, string const& aSurname) const
{
return team.count(Sportsman(aName, aSurname));
}
ищет есть ли человек с таким именем и фамилией в множестве. Count возвращает количество совпадений, но для множетсва это соответсвенно 1 или 0

Добавлено через 7 минут
минимальный вес в твоей проге определить можно. Перебери все Inform в цикле
Mr. Pyatachok
 Аватар для Mr. Pyatachok
8 / 8 / 0
Регистрация: 30.06.2011
Сообщений: 250
12.08.2011, 20:23  [ТС]     классы #27
LosAngeles, помогите с циклом (знаю тупой вопрос ), пожалуйста
LosAngeles
Заблокирован
12.08.2011, 20:28     классы #28
воспользуйся
http://www.cplusplus.com/reference/algorithm/min/
C++
1
2
template <class T, class Compare>
  const T& min ( const T& a, const T& b, Compare comp );
WeightCompare туда загони
Mr. Pyatachok
 Аватар для Mr. Pyatachok
8 / 8 / 0
Регистрация: 30.06.2011
Сообщений: 250
12.08.2011, 20:46  [ТС]     классы #29
LosAngeles, спасибо, но куда именно? (а вместо class T, class Inform ставить), еще раз огромное Вам спасибо
LosAngeles
Заблокирован
12.08.2011, 20:47     классы #30
Inform informWithMinWeight = min(&kolvo[0], &kolvo[2], WeightCompare);
Mr. Pyatachok
 Аватар для Mr. Pyatachok
8 / 8 / 0
Регистрация: 30.06.2011
Сообщений: 250
12.08.2011, 20:57  [ТС]     классы #31
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
#include<iostream.h>
#include<conio.h>
#include<string.h>
#include<set.h>
#include<algorithm>
 
class Team
{
    protected:
  char *Surname;
  char *Name;
  char *Patronymic;
  int age;
  float growth;
  float weight;
 
    public:
  Team(const char *Surname,const char *Name,const char *Patronymic,int age,float growth,float weight);
  ~Team()
  { delete[]Surname; delete[]Name; delete[]Patronymic; };
 
  const char *getSurname()const    { return Surname; };
  const char *getName()const       { return Name; };
  const char *getPatronymic()const { return Patronymic; };
  void Age   (int AGE)      {age=AGE;};
  void Growth(float GROWTH) {growth=GROWTH;};
  void Weight(float WEIGHT) {weight=WEIGHT;};
  int    Age()const    { return age; }
  double Growth()const { return growth; }
  double Weight()const { return weight; }
  friend class Inform;
  void printInform()
  {
    cout<<Surname<<' '<<Name<<' '<<Patronymic<<' '<<age<<' '<<growth<<' '<<weight<<endl;
  }
};
 
Team::Team(const char *SURNAME,const char* NAME,const char *PATRONYMIC,int AGE,float GROWTH,float WEIGHT)
{
  Surname=new char[strlen(SURNAME)+1];
  strcpy(Surname,SURNAME);
  Name=new char[strlen(NAME)+1];
  strcpy(Name,NAME);
  Patronymic=new char[strlen(PATRONYMIC)+1];
  strcpy(Patronymic,PATRONYMIC);
  age=AGE;
  growth=GROWTH;
  weight=WEIGHT;
}
 
class Inform:public Team
{
    private:
  int level_athlete;
  char *Category;
  char *Prizewinner;
    public:
  Inform(const char *SURNAME,const char* NAME,const char *PATRONYMIC,int AGE,float GROWTH,float WEIGHT,
         int LEVEL_ATHLETE,char *CATEGORY,char *PRIZEWINNER):
         Team(SURNAME,NAME,PATRONYMIC,AGE,GROWTH,WEIGHT)
  {
    level_athlete=LEVEL_ATHLETE;
  }
  void Level_athlete(int LEVEL_ATHLETE) {level_athlete=LEVEL_ATHLETE;};
  int Level_athlete()const          { return level_athlete; }
  const char *getCategory()const    { return Category; };
  const char *getPrizewinner()const { return Prizewinner; };
 
};
 
struct WeightCompare
{
  bool operator()(const Inform &a,const Inform &b)
  { return a.Weight()<b.Weight(); }
};
 
int main()
{
  Inform *kolvo[3];
  kolvo[0]=new Inform("Petrovic","Bac9","prigh",12,88,100,2,"org","4hi");
  kolvo[1]=new Inform("erighii","eurighr","nj",12,45,78,2,"org","4hi");
  kolvo[2]=new Inform("gyerhgerhgierhgreh","rehgiihr","ngerig",12,56,465,2,"org","4hi");
  for(int i=0;i<3;i++)
  { kolvo[i]->printInform();  }
  for(int i=0;i<3;i++)
  { delete kolvo[i];  }
 
  Inform informWithMinWeight=min(&kolvo[0], &kolvo[2], WeightCompare);
  getch();
}
[C++ Error] Unit1.cpp(88): E2108 Improper use of typedef 'WeightCompare'
[C++ Error] Unit1.cpp(88): E2285 Could not find a match for 'min<_Ty,_Pr>(Inform * *,Inform * *,undefined)'
[C++ Error] Unit1.cpp(88): E2285 Could not find a match for 'Inform::Inform(const Inform&)'
[C++ Warning] Unit1.cpp(90): W8004 'informWithMinWeight' is assigned a value that is never used
а тогда как с етим, или я вообще не то сделал

Добавлено через 3 минуты
Извините, что задалбливаю Вас своими тупыми вопросами
ValeryLaptev
Эксперт C++
1005 / 784 / 46
Регистрация: 30.04.2011
Сообщений: 1,595
12.08.2011, 21:57     классы #32
Очевидно, что жалуется вот на эту строку:
C++
1
Inform informWithMinWeight=min(&kolvo[0], &kolvo[2], WeightCompare);
Первые два аргумента у тебя - адреса. А требуются значения... Наверное, надо так:
C++
1
Inform informWithMinWeight=min(*(kolvo[0]), *(kolvo[2]), WeightCompare);
Mr. Pyatachok
 Аватар для Mr. Pyatachok
8 / 8 / 0
Регистрация: 30.06.2011
Сообщений: 250
12.08.2011, 22:03  [ТС]     классы #33
Ошибка скорее всего не там, я просто в первый раз с таким столкнулся (те же самые ошибки), если кто может гляньте плиз, а то я вообще не знаю что делать с этим
Sick2
14 / 14 / 1
Регистрация: 26.11.2010
Сообщений: 235
13.08.2011, 00:09     классы #34
Дабы не создавать новую тему, спрошу здесь.
Ув. знатоки, ответьте: почему char * плохо? Т.е. так будет плохо?
C++
1
2
3
4
5
6
7
8
class temp
{
char a[20];
//...
public:
temp(char *s){ strcpy(a,s);}
//..
};
Так правильнее?
C++
1
2
3
4
5
6
7
8
class temp
{
std::string a;
//...
public:
temp(std::string s){ a=s;}
//...
};
easybudda
Модератор
Эксперт С++
 Аватар для easybudda
9373 / 5423 / 914
Регистрация: 25.07.2009
Сообщений: 10,423
13.08.2011, 01:18     классы #35
Цитата Сообщение от Sick2 Посмотреть сообщение
Так правильнее?
Немного не так
C++
1
2
3
4
5
6
class temp {
    std::string a;
public:
    temp(const std::string & s) : a(s) {}
//...
};
Цитата Сообщение от Sick2 Посмотреть сообщение
почему char * плохо?
Это строки в стиле С. С++ - другой язык программирования, и пользоваться в программах лучше его средствами, а не унаследованными из С. В частности класс string уже содержит всё необходимое для использования его объектов в качестве переменных пользовательского класса - конструктор, конструктор копирования, деструктор, etc... Минус вся морока с созданием буфера нужного размера, копированием в него нужного значения, изменением размера буфера при изменении строки и ещё целая куча рутинной работы, которую за вас уже сделали профессионалы. Должна быть очень веская причина для того, чтобы отказаться от всего этого счастья и по-старинке ноль-терминальные строки использовать.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
13.08.2011, 01:31     классы
Еще ссылки по теме:

C++ Классы в c++
C++ Классы
C++ Классы

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

Или воспользуйтесь поиском по форуму:
Mr. Pyatachok
 Аватар для Mr. Pyatachok
8 / 8 / 0
Регистрация: 30.06.2011
Сообщений: 250
13.08.2011, 01:31  [ТС]     классы #36
Извините, подправьте плиз, всем заранее огромное спасибо
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
#include<iostream.h>
#include<conio.h>
#include<string.h>
#include<algorithm>
 
class Team
{
    protected:
  char *Surname;
  char *Name;
  char *Patronymic;
  int age;
  float growth;
  float weight;
 
    public:
  Team(const char *Surname,const char *Name,const char *Patronymic,int age,float growth,float weight);
  ~Team()
  { delete[]Surname; delete[]Name; delete[]Patronymic; };
 
  const char *getSurname()const    { return Surname; };
  const char *getName()const       { return Name; };
  const char *getPatronymic()const { return Patronymic; };
  void Age   (int AGE)      {age=AGE;};
  void Growth(float GROWTH) {growth=GROWTH;};
  void Weight(float WEIGHT) {weight=WEIGHT;};
  int    Age()const    { return age; }
  double Growth()const { return growth; }
  double Weight()const { return weight; }
  void printInform()
  {
    cout<<Surname<<' '<<Name<<' '<<Patronymic<<' '<<age<<' '<<growth<<' '<<weight<<endl;
  }
};
 
Team::Team(const char *SURNAME,const char* NAME,const char *PATRONYMIC,int AGE,float GROWTH,float WEIGHT)
{
  Surname=new char[strlen(SURNAME)+1];
  strcpy(Surname,SURNAME);
  Name=new char[strlen(NAME)+1];
  strcpy(Name,NAME);
  Patronymic=new char[strlen(PATRONYMIC)+1];
  strcpy(Patronymic,PATRONYMIC);
  age=AGE;
  growth=GROWTH;
  weight=WEIGHT;
}
 
class Inform:public Team
{
    private:
  int level_athlete;
  char *Category;
  char *Prizewinner;
    public:
  Inform(const char *SURNAME,const char* NAME,const char *PATRONYMIC,int AGE,float GROWTH,float WEIGHT,
         int LEVEL_ATHLETE,char *CATEGORY,char *PRIZEWINNER):
         Team(SURNAME,NAME,PATRONYMIC,AGE,GROWTH,WEIGHT)
  {
    level_athlete=LEVEL_ATHLETE;
  }
  void Level_athlete(int LEVEL_ATHLETE) {level_athlete=LEVEL_ATHLETE;};
  int Level_athlete()const          { return level_athlete; }
  const char *getCategory()const    { return Category; };
  const char *getPrizewinner()const { return Prizewinner; };
 
};
 
 
 
template <class Inform,class Compare>
 
struct WeightCompare
{
  bool operator()(const Inform &a,const Inform &b)
  { return a.Weight()<b.Weight(); }
};
 
 
 
int main()
{
  Inform *kolvo[3];
  kolvo[0]=new Inform("Petrovic","Bac9","prigh",12,88,100,2,"org","4hi");
  kolvo[1]=new Inform("erighii","eurighr","nj",12,45,78,2,"org","4hi");
  kolvo[2]=new Inform("gyerhgerhgierhgreh","rehgiihr","ngerig",12,56,465,2,"org","4hi");
  for(int i=0;i<3;i++)
  { kolvo[i]->printInform();  }
  for(int i=0;i<3;i++)
  { delete kolvo[i];  }
 
 Inform informWithMinWeight=min(*(kolvo[0]),*(kolvo[2]),WeightCompare);
 
  getch();
}
Yandex
Объявления
13.08.2011, 01:31     классы
Ответ Создать тему
Опции темы

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