Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.77/13: Рейтинг темы: голосов - 13, средняя оценка - 4.77
1 / 1 / 1
Регистрация: 09.04.2016
Сообщений: 98

Спроектировать класс Student

18.10.2016, 14:06. Показов 3122. Ответов 42
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
student (студент): фамилия, возраст (год рождения), наличие задолженностей.
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
18.10.2016, 14:06
Ответы с готовыми решениями:

Создать класс student, который использует файл student.txt
Доброе время суток. Тащемта задача такова: Нужно создать класс student, который использует файл student.txt(содержит в себе список...

Разработать класс Man (человек) и производный класс Student (студент). Описать атрибуты.
Разработать класс Man (человек) и производный класс Student (студент). Описать атрибуты.

Базовый класс PERSON и производный класс STUDENT
Базовый класс: ЧЕЛОВЕК(PERSON) Имя(name) - string Возраст (age) - int Определить методы изменения людей и создать производный класс...

42
Helper C/C++
 Аватар для Invader0x7F
286 / 163 / 122
Регистрация: 22.09.2016
Сообщений: 518
18.10.2016, 16:00
Студворк — интернет-сервис помощи студентам
Естественно.
1
1 / 1 / 1
Регистрация: 09.04.2016
Сообщений: 98
18.10.2016, 20:03  [ТС]
Цитата Сообщение от Invader0x7F Посмотреть сообщение
Это венгерская нотация. m_ - переменная член класса (member). sz - символьный буфер (c-style zero-based string buffer). n - переменная численного типа (number).
А что, если не писать эти нотации, на выполнение программы это повлияет?

Добавлено через 8 минут
Цитата Сообщение от Invader0x7F Посмотреть сообщение
Вот что необходимо писать в main'е для работы с объектом класса: Спроектировать класс
на консоль ничего не выводится, нужно cout писать?
0
Модератор
Эксперт CЭксперт С++
 Аватар для sourcerer
5288 / 2376 / 342
Регистрация: 20.02.2013
Сообщений: 5,773
Записей в блоге: 20
18.10.2016, 20:06
Paterul, Вы можете выбрать любое имя. Просто обычно принято придерживаться какой-либо конвенции (какого-либо стиля) при именовании данных-членов класса. Один из возможных вариантов - тот, который использовал Invader0x7F. Иногда можно встретить такой вариант, например:
C++
1
2
3
4
5
6
7
8
class Student
{
private:
      char* name_;
      char* birthdate_;
      int fails_;
 
// и т.д.
Именовать функции-члены и данные-члены Вы можете как угодно (как Вам удобно). Просто общепринятыми (вернее будет сказать, довольно распространёнными) вариантами являются вышеперечисленные.
1
1 / 1 / 1
Регистрация: 09.04.2016
Сообщений: 98
18.10.2016, 20:07  [ТС]
Цитата Сообщение от gru74ik Посмотреть сообщение
name_
Зачем нижнее подчеркивание?
0
Модератор
Эксперт CЭксперт С++
 Аватар для sourcerer
5288 / 2376 / 342
Регистрация: 20.02.2013
Сообщений: 5,773
Записей в блоге: 20
18.10.2016, 20:10
Цитата Сообщение от Paterul Посмотреть сообщение
А что, если не писать эти нотации, на выполнение программы это повлияет?
Не повлияет. Выбор имён - вопрос удобства, привычки и вкуса. Иногда, правда, в крупных корпорациях существуют определённые предписания, как именовать переменные, константы, классы, функции и т.п. Это называется code style или code conventions.

Добавлено через 1 минуту
Цитата Сообщение от Paterul Посмотреть сообщение
Зачем нижнее подчеркивание?
Paterul, так Вы даёте понять программисту, который будет читать Ваш код, что это имя - data member Вашего класса, а не просто какая-то произвольная переменная. Это довольно распространённая практика, как я уже говорил. Просто такое своеобразное неписанное правило. Этакое соглашение между программистами. Для удобства придумано. Это не обязательно. Но многие так делают.
1
1 / 1 / 1
Регистрация: 09.04.2016
Сообщений: 98
18.10.2016, 20:16  [ТС]
gru74ik, как в main вывести все эти 3 данные, чтобы каждая в отдельной строке
0
Модератор
Эксперт CЭксперт С++
 Аватар для sourcerer
5288 / 2376 / 342
Регистрация: 20.02.2013
Сообщений: 5,773
Записей в блоге: 20
18.10.2016, 20:22
Paterul, ещё одна причина такого именования данных-членов довольно хорошо описана у Стивена Праты в его книге "Язык программирования С++. Лекции и упражнения" (2012, 6-е издание) (см. главу 10 "Объекты и классы", стр. 502).

Добавлено через 1 минуту
Paterul, надо в классе реализовать (придумать и написать) функцию-член, которая будет это делать. Например, какую-нибудь функцию show(). Или там же перегрузить оператор <<. А затем уже в мэйне вызывать либо эту функцию-член, либо (если имеется перегруженный оператор <<) просто через std::cout выводить.

Добавлено через 2 минуты
Paterul, вот буквально на днях те же самые вопросы человек задавал. Прям, как под копирку.

Добавлено через 1 минуту
То ли ВУЗ у вас один и тот же, то ли программа у всех стандартная, то ли у преподов совсем фантазия кончилась... А может и какая-то комбинация этих причин... И книги вы, студиозусы, все, как один, читать не хотите. Скука и тоска...
1
1 / 1 / 1
Регистрация: 09.04.2016
Сообщений: 98
18.10.2016, 20:30  [ТС]
gru74ik, так? В public
C++
1
void Student::show_student();
отдельно
C++
1
2
3
4
5
6
7
void student::show_student()
 
{
cout<<"Name: "<<name<<endl;
cout<<"Data: "<<dob<<endl;
cout<<"Fails: "<<nfails<<endl;
}
Как перезагрузить оператор <<. И зачем она нужна, ведь << есть в стандарт библиотеке?
0
Модератор
Эксперт CЭксперт С++
 Аватар для sourcerer
5288 / 2376 / 342
Регистрация: 20.02.2013
Сообщений: 5,773
Записей в блоге: 20
18.10.2016, 20:41
Цитата Сообщение от Paterul Посмотреть сообщение
gru74ik, так?
Так. Только я бы оформил таким образом (просто читать удобнее, на мой взгляд, да и лишние вызовы std::cout ни к чему):
C++
1
2
3
4
5
6
7
8
9
10
11
void Student::show_student() 
{
    std::cout
        << "Name: "
        << name
        << "\nData: "
        << dob
        << "\nFails: "
        << fails
        << "\n";
}
Добавлено через 1 минуту
Цитата Сообщение от Paterul Посмотреть сообщение
Как перезагрузить оператор <<. И зачем она нужна
Paterul, перегрузив оператор <<, Вы "научите" его выводить на консоль объекты именно Вашего класса. Это бывает удобно.
1
1 / 1 / 1
Регистрация: 09.04.2016
Сообщений: 98
18.10.2016, 20:43  [ТС]
gru74ik, что-то ошибка выходит
Миниатюры
Спроектировать класс Student  
0
Модератор
Эксперт CЭксперт С++
 Аватар для sourcerer
5288 / 2376 / 342
Регистрация: 20.02.2013
Сообщений: 5,773
Записей в блоге: 20
18.10.2016, 20:52
Paterul, если Вы выбрали вариант с функцией-членом show(), то в мэйне Вам придётся вот так её использовать:
C++
1
2
3
4
5
6
7
int main()
{
    Student s( "Igor", "Sokolov", 5 );
    s.show();
    
    return 0;
}
В случае же с перегруженным оператором можно будет делать так:
C++
1
2
3
4
5
6
7
8
int main()
{
    Student s( "Igor", "Sokolov", 5 );
 
    std::cout << s;
    
    return 0;
}
Или даже так:
C++
1
2
3
4
5
6
7
8
9
int main()
{
    Student s( "Igor", "Sokolov", 5 );
    Student k( "Oleg", "Knyazev", 4 );
    
    std::cout << s << k;
    
    return 0;
}
Добавлено через 3 минуты
Paterul, не надо мне код на картинке показывать. Это моветон и нарушение правил форума. Откройте для себя комбинацию клавиш CTRL + C (копировать), CTRL + V (вставить). Вставьте код прямо в Ваше сообщение (не забудьте оформить его тэгами).
1
1 / 1 / 1
Регистрация: 09.04.2016
Сообщений: 98
18.10.2016, 20:56  [ТС]
gru74ik,
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
#include <iostream>
#include <conio.h>
#include <string.h>
#include <stdio.h>
 
 
using namespace std;
 
class Student
{
private:
      char* m_szName;
      char* m_szDOB;
      int m_nFails;
 
public:
      void Student::show_student(); //  [Error] extra qualification 'Student::' on member 'show_student' [-fpermissive] 
      Student() { };
      Student(const char* name, const char* dob, int nfails)
      {
             if (m_szName == NULL)
             {
                 m_szName = new char[256];
                 strcpy(m_szName, name);
             }
  
             if (m_szDOB == NULL)
             {
                 m_szDOB = new char[256];
                 strcpy(m_szDOB, dob);
             }
 
             if (nfails > -1) m_nFails = nfails;
      }
      
      ~Student()
      {
            if (m_szName != NULL && m_szDOB != NULL)
            {
                delete[] m_szName; m_szName = NULL;             
                delete[] m_szDOB; m_szName = NULL;             
            }
 
            if (m_nFails >= 0) m_nFails = -1;
      }
};
 
 
void Student::show_student() 
{
    std::cout
        << "Name: "
        << name //[Error] 'name' was not declared in this scope
        << "\nData: "
        << dob //[Error] 'dob' was not declared in this scope
        << "\nFails: "
        << fails //[Error] 'fails' was not declared in this scope
        << "\n";
}
 
 
int main()
{
    Student s( "Igor", "Sokolov", 5 );
    s.show(); //[Error] 'class Student' has no member named 'show'
 
    return 0;
}
0
Модератор
Эксперт CЭксперт С++
 Аватар для sourcerer
5288 / 2376 / 342
Регистрация: 20.02.2013
Сообщений: 5,773
Записей в блоге: 20
18.10.2016, 20:57
Paterul, если всё у Вас в одном файле, тогда убирайте квалификатор Student::. И 17-ю строку тоже - долой.
1
1 / 1 / 1
Регистрация: 09.04.2016
Сообщений: 98
18.10.2016, 20:59  [ТС]
gru74ik, Те же самые ошибка:
E:\ßçûêè ïðîãðàììèðîâàíèÿ\class.cpp In function 'void show_student()':
53 12 E:\ßçûêè ïðîãðàììèðîâàíèÿ\class.cpp [Error] 'name' was not declared in this scope
55 12 E:\ßçûêè ïðîãðàììèðîâàíèÿ\class.cpp [Error] 'dob' was not declared in this scope
57 12 E:\ßçûêè ïðîãðàììèðîâàíèÿ\class.cpp [Error] 'fails' was not declared in this scope
E:\ßçûêè ïðîãðàììèðîâàíèÿ\class.cpp In function 'int main()':
65 7 E:\ßçûêè ïðîãðàììèðîâàíèÿ\class.cpp [Error] 'class Student' has no member named 'show'
0
Модератор
Эксперт CЭксперт С++
 Аватар для sourcerer
5288 / 2376 / 342
Регистрация: 20.02.2013
Сообщений: 5,773
Записей в блоге: 20
18.10.2016, 21:09
Лучший ответ Сообщение было отмечено Paterul как решение

Решение

Paterul, вот:
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
#include <iostream>
#include <cstring>
 
class Student
{
private:
      char* m_szName;
      char* m_szDOB;
      int m_nFails;
 
public:
    Student(const char* name = "", const char* dob = "", int nfails = 0)
    {
        m_szName = new char[256];
        strcpy(m_szName, name);
 
        m_szDOB = new char[256];
        strcpy(m_szDOB, dob);
 
        m_nFails = nfails;
    }
 
    ~Student()
    {
        delete[] m_szName;
        delete[] m_szDOB;
    }
 
    void show()
    {
        std::cout
        << "Name:\t"
        << m_szName
        << "\nData:\t"
        << m_szDOB
        << "\nFails:\t"
        << m_nFails
        << "\n\n";
    }
};
 
 
int main()
{
    Student s( "Igor", "11.11.878", 5 );
    s.show();
 
    return 0;
}
1
1 / 1 / 1
Регистрация: 09.04.2016
Сообщений: 98
08.11.2016, 19:05  [ТС]
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
#include <iostream>
#include <cstring>
#include <math.h>
using namespace std;
class Student{
    private:
        unsigned int fails_number;
        unsigned int date_of_birth;
        string stud_name;
        
        
    public:
        Student();
        Student(string name, unsigned  int number, unsigned  int birth) {
            stud_name = name;
            date_of_birth = birth;
 
            fails_number = 0;
        }
    
        void setStudName(string name) {
            stud_name = name;
        }
        void setFailsNumber(unsigned int number) {
            fails_number = number;
        }
        void setBirthDate(unsigned int birth){
            date_of_birth = birth;
        }
 
        string getStudName() {
            return stud_name;
        }
 
        unsigned int getFailsNumber() {
            return fails_number;
        }
        unsigned int getBirthDate() {
            return date_of_birth;
        }
 
 
 
        friend ostream & operator <<(ostream &os, const Student &s) {
                                                return os << "Stud: " << s.stud_name << '\n' << "Fails: " << s.fails_number << " Date of Birth " << s.date_of_birth << '\n';
                }
        
                friend istream & operator >>(istream &is, Student &s) {
                                   return is >> s.stud_name >> s.fails_number >> s.date_of_birth;    
                }
};
int main()
{
          Student S;
          cin >> S;
          cout << S;
          //system("pause");
          return 0;
}
Написал свой код, но он не работает, исправьте, пожалуйста, сильно не изменяя код
Выдает 1 ошибку:
C++
1
C:\Users\BFE1~1\AppData\Local\Temp\ccWlERVM.o   versia2.cpp:(.text+0xaa): undefined reference to `Student::Student()'
0
Любитель чаепитий
 Аватар для GbaLog-
3745 / 1801 / 566
Регистрация: 24.08.2014
Сообщений: 6,020
Записей в блоге: 1
08.11.2016, 19:18
Цитата Сообщение от Paterul Посмотреть сообщение
Выдает 1 ошибку
Реализуйте конструктор, который не принимает аргументов.
В 13 строке.
0
1 / 1 / 1
Регистрация: 09.04.2016
Сообщений: 98
08.11.2016, 19:40  [ТС]
Зачем реализовывать пустой конструктор?

Добавлено через 13 минут
Понятия не имею, что писать в пустом конструкторе, если все уже есть в конструктор с тремя переменными...
0
Любитель чаепитий
 Аватар для GbaLog-
3745 / 1801 / 566
Регистрация: 24.08.2014
Сообщений: 6,020
Записей в блоге: 1
08.11.2016, 19:45
Цитата Сообщение от Paterul Посмотреть сообщение
Зачем реализовывать пустой конструктор?
Чтобы ошибки не было, очевидно жеж.
Цитата Сообщение от Paterul Посмотреть сообщение
Понятия не имею, что писать в пустом конструкторе, если все уже есть в конструктор с тремя переменными...
Цитата Сообщение от Paterul Посмотреть сообщение
Student S;
Вот тут используется пустой конструктор...
Но т.к. он не реализован, компилятор Вам об этом сообщает.
0
1 / 1 / 1
Регистрация: 09.04.2016
Сообщений: 98
08.11.2016, 19:57  [ТС]
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
#include <iostream>
#include <cstring>
#include <math.h>
using namespace std;
class Student{
    private:
        unsigned int fails_number;
        unsigned int date_of_birth;
        string stud_name;
        
        
    public:
        Student(){};
 
        Student(string name, unsigned  int number, unsigned  int birth) {
            stud_name = name;
            date_of_birth = birth;
 
            if (fails_number > -1) fails_number = number;
        }
    
        void setStudName(string name) {
            stud_name = name;
        }
        void setFailsNumber(unsigned int number) {
            fails_number = number;
        }
        void setBirthDate(unsigned int birth){
            date_of_birth = birth;
        }
 
        string getStudName() {
            return stud_name;
        }
 
        unsigned int getFailsNumber() {
            return fails_number;
        }
        unsigned int getBirthDate() {
            return date_of_birth;
        }
 
 
 
        friend ostream & operator <<(ostream &os, const Student &s) {
                                                return os << "Stud: " << s.stud_name << '\n' << "Date of Birth: " << s.date_of_birth << '\n' <<"Fails " << s.fails_number << '\n';
                }
        
                friend istream & operator >>(istream &is, Student &s) {
                                   return is >> s.stud_name >> s.date_of_birth >> s.fails_number;    
                }
};
int main()
{
          Student S;
          cin >> S;
          cout << S;
          //system("pause");
          return 0;
}
Все, теперь работает)

Добавлено через 6 минут
GbaLog-, А как быть с тем, что если введешь отрицательное число задолженностей, то на выходе пишет непонятное число?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
08.11.2016, 19:57

Базовый класс Student и производный класс Aspirant
Задача была такова: Создайте класс Student, который будет содержать информацию о студенте. С помощью механизма наследования,...

Создать класс Man (человек), с полями: имя, возраст, пол и вес. Создать производный класс Student ...
Создать класс Man (человек), с полями: имя, возраст, пол и вес. Определить методы задания имени, возраста и веса. Создать производный класс...

Спроектировать и реализовать класс BigInt
Нужно спроектировать и реализовать класс BigInt, позволяющий хранить целые числа в диапазоне , и производить набор основных операций с...

Спроектировать и реализовать класс Matrix
Спроектировать и реализовать класс Matrix, предназначенный для работы с матрицами. Класс должен позволять создавать матрицы различных...

Класс Student
1. Создать класс &quot;Student&quot;, имеющий public: массивы-фамилия, оценки(3). private: средний балл. 2. Добавить в класс метод, который будет...


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

Или воспользуйтесь поиском по форуму:
40
Ответ Создать тему
Новые блоги и статьи
Про "Windows must die!"
kumehtar 04.11.2026
Знаете, чет накатило. . . . Когда-то это было почти боевым кличем: мол, нормальный человек сидит на DOS, OS/ 2 или Linux, а вот это вот - Must Die. А теперь человек произносит «мастдай» с усмешкой - и. . .
Красочные поля с номером страницы svg+background-image
russiannick 04.11.2026
Красочные поля с номером страницы не менее важны чем в эпоху бумажных книг. Посему спешу представить почтеннейшей публике этот важный инструмент который эти поля и формирует. В процессе разработки. . .
Вступаем в новую фазу генерации favicons, векторную.
russiannick 02.11.2026
Теперь нет нужды скрывать что используется простой svg. Исходный код изображения помещаем в поле и жмем кнопку. Исходник преобразуется в вид корректный для помещения в favicon или в url(). Нажатие. . .
Генератор паролей (вариант №4)
Maks 01.11.2026
После публикации 3-го варианта генератора паролей, разослал его своим коллегам (с целью оценки), в итоге были получены следующие рекомендации: 1. Вернуть возможность использования знаков | 1 l I;. . .
Генератор паролей (вариант №3)
Maks 30.10.2026
Финальная версия генератора паролей 1С. Доработка решения в этот раз коснулась только визуальной части, а именно, добавлен реквизит ДопПараметры (тип Булево), который скрывает/ отображает реквизиты:. . .
Магическое мышление и магия, современная наука не отличима от магии (говорит ИИ Джемени)
zorxor 30.10.2026
Джемени, расскажи, пожалуйста, что такое магическое мышление, что такое магия, почему современная наука чем-то напоминает магию? Фраза «Любая достаточно развитая технология неотличима от магии». . .
За какое время ИИ может подобрать пароль по хешу (рассказывает Джемени ИИ)
zorxor 30.10.2026
Расскажи, Джемени, если известен хэш МД5, например, за сколько ИИ сможет подобрать соответствующий пароль? Искусственный интеллект (ИИ) может подобрать простой или средний по сложности пароль по. . .
Кто убил Suno? Почему наше солнышко погасло? (диалог с ИИ Джемени)
zorxor 30.10.2026
Как убивали Suno. Хронология. «Убийство» музыкальной нейросети Suno — это затяжной процесс, в котором технологический хайп стартапа разбился о жесткую реальность судебных исков от гигантов. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru