На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
Модераторы: Qraizer, Hsilgos
  
> список из объектов с++
    Здравствуйте. Я новичок в с++. Необходимо решить задачу. Есть класс Student, с параметрами:
    ExpandedWrap disabled
      class Students {
          public:
              void set_name(std::string student_name)
              {
                  name = student_name;
              }
       
              std::string get_name()
              {
                  return name;
              }
       
              void set_fnum(int student_fnum)
              {
                  fnum = student_fnum;
              }
       
              int get_fnum()
              {
                  return fnum;
              }
       
              void set_group(int student_group)
              {
                  group = student_group;
              }
       
              int get_group()
              {
                  return group;
              }
       
              void set_fakultet(std::string student_fakultet){
                  fakultet=student_fakultet;
              }
       
              std::string get_fakultet(){
              return fakultet;
              }
       
          private:
              std::string name;
              int fnum;
              int group;
              std::string fakultet;
      };


    Также есть дочерний класс Grade, где исходя из введенных оценок в массивы высчитывается средний бал студента.

    Вопрос: как можно создать список из объектов Grade? Мне необходимо будет получить доступ к конкретной переменной в этом объекте, например, к среднему баллу. Или через список такое реализовать не получится?
      1. лучше приватные данные указывать в начале класса, ниже публичные
      Цитата Erikamaria @
      Также есть дочерний класс Grade, где исходя из введенных оценок в массивы высчитывается средний бал студента.


      2. Класс "ГРЕЙД" отвечает за сущность ОДНОЙ оценки, да? Ну, например, у этого класса может быть 2 приватных поля: сама оценка (mark) и название дисциплины (disipline),по которой проставлена оценка. Если так, то класс студент должен инкапсулировать массив таких "ГРЕЙДОВ",а для выведения средней оценки должна быть расчетная функция для каждого студента

      3. из постановки задачи еще непонятно, насколько сильное сопряжение между классами Студент и Оценка. По логике оценки не имеют права на существование без студентов

      я так вижу
        В классе "Грэйд" есть два массива, по одному на каждый семестр. В каждом массиве по 5 элементов. Я реализовала введенние данных и поиск средней оценки студента след образом:
        ExpandedWrap disabled
          class Grade:public Students{
            float avrg;
           
          public:          
                   void set_avrg(float ball)
                  {
                      avrg = ball;
                  }
           
                  float get_avrg()
                  {
                      return avrg;
                  }
           
          void addStudent(){
           
              Grade student; // Создание объекта класса Student
           
              std::string name;
                  int fnum;
                  int group;
              std::string fakultet;
           
           
              std::cout << "Name: ";
              getline(std::cin, name);
           
              std::cout << "Fak nomer: ";
              std::cin >> fnum;
           
              std::cout << "Group: ";
              std::cin >> group;
           
              std::cout << "Fakultet: ";
              getline(std::cin, fakultet);
           
              // Сохранение имени и фамилии в объект класса Grade
              student.set_name(name);
              student.set_fnum(fnum);
              student.set_group(group);
              student.set_fakultet(fakultet);
           
           
              int sem1[5];
              int sem2[5];
              int sum = 0;
           
              // Ввод промежуточных оценок
              std::cout<<"Оценки за 1 семестр:"<<std::endl;
              for (int i = 0; i < 5; ++i) {
                  std::cout << "Score " << i+1 << ": ";
                  std::cin >> sem1[i];
                  // суммирование
                  sum += sem1[i];
              }
           
              std::cout<<"Оценки за 2 семестр:"<<std::endl;
              for (int i = 0; i < 5; ++i) {
                  std::cout << "Score " << i+1 << ": ";
                  std::cin >> sem2[i];
                  // суммирование
                  sum += sem2[i];
              }
           
           
              // Считаем средний балл
              float average_ball = sum / 10.0;
           
              // Сохраняем средний балл в объект класса Students
              student.set_avrg(average_ball);
          }
           
          };


        Как теперь создать список из объектов типа Грэйд (имя, факультетный номер, группа, факультет, ср балл) так, чтобы можно было получить доступ,например, к среднему баллу, чтобы найти студента с макс или мин значением? или что использовать вместо списков?
          я не знаю, но мне что-то композиция классовая не нравится в целом
          оценка наследник от студента) ну такое!) (логически - набор оценок - один из аттрибутов стьюдента)
          хотя я видел и решал множество вузовских заданий с аболютно бредовыми связями и сопряжениями

          а вообще, прежде чем кодить надо бы провести тщательнейшую проектировку классов сначала, порисовать комиксы, взаимосвязи и 99% проблем на этом этапе уходит! Макконел ни разу не соврал в своей шедевральнейшей книге по этому поводу)

          о каких списках речь?! список в теории прогр-ния - линейный односвязный список (динамическая структура)

          в общем я пас, но я бы начал с пересмотра проектировки композиции классов
            Erikamaria, я в принципе не въехал в постановку задачи. Если это учебное задание, то можно честно прийти к преподу и сказать, что эта задача ошибочна. Её можно решить, но на практике ни одному программисту такой архитектуры в голову не придёт, а если и придёт, первое же код-ревью уволит его нафик.
            Коллекция объектов никогда архитектурно не связана с объектами. Им абсолютно незачем быть представленными одной иерархией. Главное назначение наследования – выступать в роли своего базового класса в тех точках алгоритма, где ожидается базовый класс, плюс добавить к базовому классу свой функционал. Коллекция объектов по определению не может выступать вместо хранимых в ней объектов, она лишь группирует их и предоставляет тот или иной способ удобно ими управлять. Это совершенно другое назначение, наследованию тут делать нечего, оно тут никаких задач не решает.
              Цитата Erikamaria @
              Вопрос: как можно создать список из объектов Grade? Мне необходимо будет получить доступ к конкретной переменной в этом объекте, например, к среднему баллу. Или через список такое реализовать не получится?

              Список из объектов - это значит, надо использовать объект-список.
              Найти подходящий библиотечный или писать самому.
              www.ya.ru ищем: "Список c++"
              Получим например это.
              Как сделать список самому можно посмотреть
              в книге Г. Шилдта "Теория и практика с++"
              Сообщение отредактировано: ЫукпШ -
              0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
              0 пользователей:


              Рейтинг@Mail.ru
              [ Script execution time: 0,0288 ]   [ 16 queries used ]   [ Generated: 28.03.24, 14:29 GMT ]