Для оперативного получения новой информации добавьте эту страницу в закладки. (На компьютере Ctrl+D)
Поклонники/Поклонницы
Статусы пользователя:
"Никогда и ничего не просите, никогда и ничего, особенно у тех, кто сильнее Вас, сами всё предложат и сами всё дадут. Воланд" замечен 2019-12-26 02:06:50
В этом уроке мы более детально познакомимся с конструкторами и деструкторами класса, а также научимся работать с файлами в потоковом режиме, с помощью библиотеки fstream. Продолжим написание программы учета оценок.
Конструктор Students
Добавим в класс Students конструктор, который будет принимать имя и фамилию ученика, и сохранять эти значения в соответствующих переменных класса.
При создании нового объекта, мы должны передать конструктору имя и фамилию студента. Иначе компиляция программы завершится с ошибкой.
Теперь добавим прототип конструктора в файл students.h.
В файле students.cpp определим сам конструктор.
В main() мы принимаем от пользователя имя и фамилию ученика, и сохраняем их во временных локальных переменных. После этого создаем новый объект класса Students, передавая его конструктору эти переменные.
int main(int argc, char *argv[])
{
// Локальная переменная, хранящая имя ученика
std::string name;
// И его фамилию
std::string last_name;
// Ввод имени
std::cout « "Name: ";
getline(std::cin, name);
// И фамилии
std::cout « "Last name: ";
getline(std::cin, last_name);
// Передача параметров конструктору
Students *student = new Students(name, last_name);
// Оценки
int scores[5];
// Сумма всех оценок
int sum = 0;
// Ввод промежуточных оценок
for (int i = 0; i < 5; ++i) {
std::cout « "Score " « i+1 « ": ";
std::cin » scores[i];
// суммирование
sum += scores[i];
}
// Сохраняем промежуточные оценки в объект класса Student
student->set_scores(scores);
// Считаем средний балл
float average_ball = sum / 5.0;
// Сохраняем средний балл
student->set_average_ball(average_ball);
// Выводим данные по студенту
std::cout « "Average ball for " « student->get_name() « " "
« student->get_last_name() « " is "
« student->get_average_ball() « std::endl;
// Удаление объекта student из памяти
delete student;
return 0;
}
Деструктор Students
Логично было бы сохранять все оценки после того, как работа со студентом закончена. Для этого создадим деструктор класса Students, который будет вызывать метод save() перед уничтожением объекта.
Добавим прототипы деструктора и метода save() в students.h.
И определим эти функции в students.cpp.
/* students.cpp */ #include #include
for (int i = 0; i < 5; ++i) {
fout « Students::scores[i] « " ";
}
fout « std::endl;
fout.close();
}
// Конструктор Students
Students::Students(std::string name, std::string last_name)
{
Students::set_name(name);
Students::set_last_name(last_name);
}
// Установка имени студента
void Students::set_name(std::string student_name)
{
Students::name = student_name;
}
// Получение имени студента
std::string Students::get_name()
{
return Students::name;
}
// Установка фамилии студента
void Students::set_last_name(std::string student_last_name)
{
Students::last_name = student_last_name;
}
// Получение фамилии студента
std::string Students::get_last_name()
{
return Students::last_name;
}
// Установка промежуточных оценок
void Students::set_scores(int scores[])
{
int sum = 0;
for (int i = 0; i < 5; ++i) {
Students::scores[i] = scores[i];
sum += scores[i];
}
}
// Получение массива с промежуточными оценками
int *Students::get_scores()
{
return Students::scores;
}
// Установка среднего балла
void Students::set_average_ball(float ball)
{
Students::average_ball = ball;
}
// Получение среднего балла
float Students::get_average_ball()
{
return Students::average_ball;
}
Содержимое main.cpp останется прежним. Скомпилируйте и запустите программу. Перед тем, как приложение завершит свою работу, в директории с исполняемым файлом будет создан новый текстовый файл с оценками — students.txt.