Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.75/4: Рейтинг темы: голосов - 4, средняя оценка - 4.75
0 / 0 / 0
Регистрация: 08.12.2020
Сообщений: 7

Как правильно спроектировать класс?

04.11.2021, 00:01. Показов 814. Ответов 3

Студворк — интернет-сервис помощи студентам
Вызвано исключение по адресу 0x7A09FF10 (ucrtbased.dll) в timik.exe: 0xC0000005: нарушение прав доступа при чтении по адресу 0xEF1904B4.
Постоянно ловлю исключения, мол не имеет моё меню доступа к членам класса. Как перепроектировать программу?

C++
1
2
3
4
5
6
7
8
#pragma once
#include "Student.h"
class Teacher
{
    friend class Student;
public:
    void putTwo(Student& student);
};
C++
1
2
3
4
5
#include "Teacher.h"
 
void Teacher::putTwo(Student& student) {
    student.getMyNotes(2);
};
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
#pragma once
#include <string>
#include <iostream>
 
 
 
class Student {
private:
    std::string surname;
    std::string name;
    int* notes;
    int sizeArray = 0;
    static int id;
    float average;//для сортировки
public:
    Student();
    Student(std::string surname, std::string name);
    Student(const Student& student);
    void getMyNotes(int notes);
    void CalculateAverage();
    //void checkNotes();
    ~Student();
 
    int getID();
    std::string getSurname ();
    std::string getName();
    float getAverage();
 
    friend std::istream& operator>> (std::istream& in, Student& student);
    friend std::ostream& operator<<(std::ostream& out, const Student& student);
};
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
#pragma once
 
#include "Student.h"
 
Student::Student() {
    int* notes = new int[sizeArray];
    /*Student::surname = "Ivanov";
    Student::name = "Ivan";*/
    Student::id = ++id; 
};
 
Student::Student(std::string surname, std::string name) { 
    Student::surname = surname;
    Student::name = name;
    int* notes = new int[sizeArray];
    Student::id = ++id;};
 
Student::Student(const Student& student) {
    this->notes = new int[student.sizeArray];
    for (int i = 0; i < student.sizeArray; i++)
        this->notes[i] = student.notes[i];
    this->name = student.name;
    this->surname = student.surname;
    this->id = student.id;
};
 
void Student::CalculateAverage() {
    if (this->sizeArray == 0)
    {
        this->average = 0;
        return;
    }
    int Sum = 0;
    for (int i = 0; i < this->sizeArray; i++)
    {
        Sum += this->notes[i];
    }
    this->average = Sum / this->sizeArray;
 
};
 
int Student::getID(){
    return Student::id;
}
 
float Student::getAverage() {
    CalculateAverage();
    return Student::average;
}
 
std::string  Student::getName() 
{
    return Student::name;
}
 
std::string  Student::getSurname()
{
    return Student::surname;
}
 
 
void Student::getMyNotes(int notes) { 
    try
    {
        if (notes <= 0 || notes > 5)
            throw - 1;
        int* tmpArray = new int[this->sizeArray];
        for (int i = 0; i < this->sizeArray; i++)
        {
            tmpArray[i] = this->notes[i];
        }
        this->sizeArray++;
        delete[] this->notes;
        this->notes = new int[this->sizeArray];
        for (int i = 0; i < this->sizeArray-1; i++)
        {
            this->notes[i] = tmpArray[i];
        }
        this->notes[this->sizeArray - 1] = notes;
    }
    catch (int a)
    {
        std::cout << "INCORRECT INPUT, PLEASE, TRY AGAIN" << std::endl;
    }
    CalculateAverage();
};
 
Student::~Student() { /*delete[] notes; */ };
 
int Student::id = 0;
 
std::ostream& operator<< (std::ostream& out,const Student& student){
    out << "Student (" <<  student.surname << ", " << student.name << ", average notes " << student.average << ")";
 
    return out;
}
 
std::istream& operator>> (std::istream& in, Student& student){  
    std::cout << "Enter surname: ";
    in >> student.surname;
    std::cout << "Enter name: ";
    in >> student.name;
 
    return in;
}
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
#include "Student.h"
#include "Teacher.h"
 
 
 
int main()
{
    Teacher Teach;
    Student Nick;
    Student Mike("Petrov", "Petr");
    Mike.getMyNotes(8);
    Teach.putTwo(Nick);
    Nick.getMyNotes(3);
    Nick.getMyNotes(1);
    Student Timik(Nick);
    Student Kirill("Sidorov","Kirill");
 
    std::cout << Nick << std::endl << Mike << std::endl << Timik << std::endl;
 
    int numberOfStudent = 0;
    Student* studentArray = new Student[numberOfStudent];
 
    //studentArray[0] = Nick;
    //studentArray[1] = Timik;
    //studentArray[1] = Kirill;
 
    flag:
    while (true) {
        std::cout << "(C)reate new student " << std::endl;
        std::cout << "(R)ead all students " << std::endl;
        std::cout << "(U)pdate students notes " << std::endl;
        std::cout << "(D)elete student " << std::endl;
        std::cout << "(E)xit" << std::endl;
 
        char choice;
        std::cin >> choice;
 
        switch (choice) {
        case 'C': {
            Student Pasha("Pavlov","Pavel");
            Pasha.getMyNotes(5);
 
            Student* tmpStudentArray = new Student[numberOfStudent];
            for (int i = 0; i < numberOfStudent; i++)
            {
                tmpStudentArray[i] = studentArray[i];
            }
            numberOfStudent++;
            delete[] studentArray;
            Student* studentArray = new Student[numberOfStudent];
            for (int i = 0; i < numberOfStudent - 1; i++)
            {
                studentArray[i] = tmpStudentArray[i];
            }
            studentArray[numberOfStudent - 1] = Pasha;
            delete[] tmpStudentArray;
            break;}
        case 'R': {
            for (int i = 0; i < numberOfStudent; i++)
            {
                std::cout << studentArray[i]<<std::endl;
            }
            break; }
        case 'U': {break; }
        case 'D': {
            for (int i = 0; i < numberOfStudent; i++)
            {
                std::cout << studentArray[i].getID() << "  " << studentArray[i].getSurname() << std::endl;
                std::cout << "Enter id";
                int a;
                std::cin >> a;
 
                Student* tmpStudentArray = new Student[numberOfStudent];
                for (int i = 0; i < numberOfStudent; i++)
                {
                    tmpStudentArray[i] = studentArray[i];
                }
                numberOfStudent--;
                delete[] studentArray;
                Student* studentArray = new Student[numberOfStudent];
                for (int i = 0, k = 0; i < numberOfStudent; i++)
                {
                    if (i == a)
                        continue;
                    studentArray[k] = tmpStudentArray[i];
                    k++;
                }
                delete[] tmpStudentArray;
                break;
            }
        case 'E': exit(0);
        default: {goto flag; break; }
 
        }
        }
 
    }
    delete[] studentArray;
}
Миниатюры
Как правильно спроектировать класс?  
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
04.11.2021, 00:01
Ответы с готовыми решениями:

Как правильно спроектировать приложение с классами. Ошибки компиляции
Здравствуйте. Пишу программку на C++. Изучаю ООП. Использую QtCreator. 5.13.2. Компилирую в MinGW 64-bit. Вот ._. Консольное...

Спроектировать класс Student
student (студент): фамилия, возраст (год рождения), наличие задолженностей.

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

3
фрилансер
 Аватар для Алексей1153
6473 / 5694 / 1131
Регистрация: 11.10.2019
Сообщений: 15,171
04.11.2021, 08:23
annapeshko, на какую строку указывает отладчик?

Добавлено через 1 минуту
Цитата Сообщение от annapeshko Посмотреть сообщение
Student::getMyNotes
- опять это супер-комбо с двойным выделение. Это где так учат, что за шарага?
0
Модератор
Эксперт С++
 Аватар для zss
13780 / 10973 / 6491
Регистрация: 18.12.2011
Сообщений: 29,259
04.11.2021, 08:41
Грубая ошибка в конструкторах
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
Student::Student() {
    sizeArray=1;
    /*int* */ notes = new int[sizeArray]; //  notes объявлялась как новая локальная переменная
    /*Student::surname = "Ivanov";
    Student::name = "Ivan";*/
    Student::id = ++id; 
};
 
Student::Student(std::string surname, std::string name) { 
    Student::surname = surname;
    Student::name = name;
    sizeArray=1;
 
    /*int* */ notes = new int[sizeArray]; //  notes объявлялась как новая локальная переменная
    Student::id = ++id;};
Цитата Сообщение от annapeshko Посмотреть сообщение
Mike.getMyNotes(8);
Цитата Сообщение от annapeshko Посмотреть сообщение
if (notes <= 0 || notes > 5)
throw - 1;
8 подходит под это исключение
0
0 / 0 / 0
Регистрация: 08.12.2020
Сообщений: 7
04.11.2021, 11:34  [ТС]
Отладчик ругается при попытке вызвать Read в меню. нарушение прав доступа при чтении по адресу 0x80F4984C в перегрузке оперaтора <<

Добавлено через 34 секунды
Отладчик ругается при попытке вызвать Read в меню. нарушение прав доступа при чтении по адресу 0x80F4984C в перегрузке оперaтора <<
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
04.11.2021, 11:34
Помогаю со студенческими работами здесь

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

Спроектировать класс Множество реализовав конструкторы и соответствующие методы
Спроектировать классы, реализовав конструкторы и соответствующие методы. В главной функции продемонстрировать их использование. ...

Как правильно реализовать класс?
Вопрос первый при реализации классов на java, я для каждого класса создавал новый файл, как это лучше реализовать в c++ есть ли возможность...

Как правильно записать в бинарник класс
#pragma once #include &quot;initch.h&quot; class Recipe { private: string path = &quot;C:/Users/User/Desktop/проэкт...

Как правильно разбивать класс на модули?
Как правильно разбить на модули абстрактный класс и класс наследник? Допустим, у меня есть какой-то абстрактный класс двигателя class...


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Новые блоги и статьи
Модель заражения группы наркоманов
alhaos 17.04.2026
Условия задачи сформулированы тут Суть: - Группа наркоманов из 10 человек. - Только один инфицирован ВИЧ. - Колются одной иглой. - Колются раз в день. - Колются последовательно через. . .
Мысли в слух. Про "навсегда".
kumehtar 16.04.2026
Подумалось тут, что наверное очень глупо использовать во всяких своих установках понятие "навсегда". Это очень сильное понятие, и я только начинаю понимать край его смысла, не смотря на то что давно. . .
My Business CRM
MaGz GoLd 16.04.2026
Всем привет, недавно возникла потребность создать CRM, для личных нужд. Собственно программа предоставляет из себя базу данных клиентов, в которой можно фиксировать звонки, стадии сделки, а также. . .
Знаешь почему 90% людей редко бывают счастливыми?
kumehtar 14.04.2026
Потому что они ждут. Ждут выходных, ждут отпуска, ждут удачного момента. . . а удачный момент так и не приходит.
Фиксация колонок в отчете СКД
Maks 14.04.2026
Фиксация колонок в СКД отчета типа Таблица. Задача: зафиксировать три левых колонки в отчете. Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка) / / . . .
Настройки VS Code
Loafer 13.04.2026
{ "cmake. configureOnOpen": false, "diffEditor. ignoreTrimWhitespace": true, "editor. guides. bracketPairs": "active", "extensions. ignoreRecommendations": true, . . .
Оптимизация кода на разграничение прав доступа к элементам формы
Maks 13.04.2026
Алгоритм из решения ниже реализован на нетиповом документе, разработанного в конфигурации КА2. Задачи, как таковой, поставлено не было, проделанное ниже исключительно моя инициатива. Было так:. . .
Контроль заполнения и очистка дат в зависимости от значения перечислений
Maks 12.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: реализовать контроль корректности заполнения дат назначения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru