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

Дружественная функция для класса - C++

Восстановить пароль Регистрация
 
5iver641
0 / 0 / 0
Регистрация: 07.02.2013
Сообщений: 13
02.05.2013, 19:31     Дружественная функция для класса #1
Здравствуйте, имеется следующая задача:
Базовый класс «СТУДЕНТ» описывает следующие данные о студентах университета: ФИО, год поступления, курс, номер группы, размер стипендии, оценки по n предметам. В состав класса входят следующие функции: виртуальный метод просмотра информации о студенте, функция-друг, которая вычисляет средний балл и выводит ФИО студента, у которого он максимальный. Производный класс «СТУДЕНТ-ОБЩЕСТВЕННИК» содержит следующие элементы: общественная работа, процент надбавки к стипендии, переопределенный метод просмотра информации о студентах-общественниках. Производный класс «СТУДЕНТ-СПОРТСМЕН» содержит следующие элементы: вид спорта, переопределенный метод просмотра информации о студентах-спортсменах.

Проблема в том что не могу правильно составить дружественную функцию, которая вычисляет средний балл и выводит ФИО студента, у которого он максимальный. Подскажите в каком месте её следует вызывать и как правильно обращаться к переменным класса. Заранее спасибо.


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
#include <iostream>
#include <conio.h>
using namespace std;
 
//базовый класс студент
class student
{ protected:
    char familia[80], name[80], otchestvo[80];
   int postupyear, kurs;
   char group[20];
   int a, *otcenki, sbal, maxbal;
   char maxname[80], maxfam[80];
   public:
   student();
   friend void sred(student& t, int p);
   virtual ~ student(){}
   virtual void Display();//просмотр инфы о студенте
  };
 
student::student()
{cout << " Name: "; cin>> name;
    cout << "\n Last name: "; cin>> familia;
    cout << "\n Patronymic: "; cin>> otchestvo;
    cout<<"\n Kurs: ";cin>> kurs;
    cout<<"\n Year of entry: "; cin>> postupyear;
    cout<< "\n Group: "; cin>> group;
    cout<<"\n Kol-vo otcenok: "; cin>>a;
    cout<<"\n Ocenki: ";
           otcenki=new int[a];
           for (int i=0; i<a; i++)
           cin >> otcenki[i];
 
   }
  void student:: Display()
    { cout << " Name: "<< name;
      cout << "\n Last name: "<< familia;
      cout << "\n Patronimic: " << otchestvo;
      cout<<"\n Kurs: "<< kurs;
      cout<<"\n Year of entry: "<<postupyear;
  }
 
  //производный класс "общественник"
  class obshestvennik : public  student
   { protected:
       char work[80]; //Общественная работа
       int  cash;//надбавка к стипендии
     public:
       obshestvennik();
       virtual ~ obshestvennik(){}
       virtual void Display(); //вывод описания книги
    };
 
  obshestvennik::obshestvennik()
  { cout << "\nObshestvennaia rabota:"; cin>>work;
      cout << "\n Nadbavka k stipendii: "; cin>>cash;
   }
 void obshestvennik::Display()
  { cout << " Name: "<< name;
     cout << "\n Last name: "<< familia;
     cout << "\n Patronimic: " << otchestvo;
     cout<<"\n Kurs: "<< kurs;
     cout<<"\n Year of entry: "<<postupyear;
     cout<< "\n Group: "<<group;
     cout << "\nObshestvennaia rabota:"<<work;
     cout << "\n Nadbavka k stipendii: "<<cash;
  }
 
 // производный класс "спортсмен"
  class sportsman : public  student
   { protected:
      char sport[80];
     public:
       sportsman();
       virtual ~ sportsman(){}
       virtual void Display();
    };
 
  sportsman::sportsman():student()
  {
   cout << "\n Sport: "; cin >> sport;
   }
 void sportsman::Display()
 {cout << " Name: "<< name;
     cout << "\n Last name: "<< familia;
     cout << "\n Patronimic: " << otchestvo;
     cout<<"\n Kurs: "<< kurs;
     cout<<"\n Year of entry: "<<postupyear;
     cout<< "\n Group: "<<group;
     cout << "\n Sport: "<< sport;
 
  }
 
void sred( student& t, int p)
{
    for (int i=0; i<t.a; i++)
    {t.sbal=t.sbal+t.otcenki[i];
        if (t.sbal/t.a>t.maxbal)
    {t.maxbal=t.sbal;
            }
    }
    cout << t.maxbal;
 
  }
 
int main()
{ int nMenu, flag = 1, kol;
  int i = 0; //индекс нового студента
  student* p[100];
  cout <<"\nKol-vo studentov: ";cin >> kol;
  while(i < kol&& flag)
   { // вывод пунктов меню
     cout<<"\nNew student. Input: " << endl;
     cout<<"1 - for obshestvennik, 2-for sportsman,3-exit\n";
      cin >> nMenu;
     switch (nMenu)
      { case 1 : p[i++] = new obshestvennik(); break;
        case 2 : p[i++] = new sportsman(); break;
        default : flag = 0; break;
      }
    }
  // вывод студентов
  for (int id = 0; id < kol; id++)
   { p[id]->Display();
     delete p[id];
    }
    getch();
 }
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
02.05.2013, 19:31     Дружественная функция для класса
Посмотрите здесь:

Преобразование типа аргумента в тип класса и дружественная функция C++
Почему дружественная функция с перегруженным оператором << не имеет доступа к данным класса? C++
Переопределение операторов как член-класса и как дружественная функция C++
Дружественная функция, объявлённая ранее вне пространства имён класса -> error LNK2019 в Visual Studio 2012 C++
Дружественная функция для сравнения строк C++
C++ Шаблон класса и дружественная функция
Дружественная функция-оператор, доступ к закрытым полям класса C++
C++ Дружественная функция класса

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Ответ Создать тему
Опции темы

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