В этом уроке мы более детально познакомимся с деструкторами класса, а также научимся работать с файлами в потоковом режиме, с помощью библиотеки fstream. Продолжим написание программы учета оценок.
Деструктор Students
Логично было бы сохранять все оценки после того, как работа со студентом закончена. Для этого создадимдеструктор класса Students, который будет вызывать метод save() перед уничтожением объекта.
Students::~Students()
{
Students::save();
}
Добавим прототипы деструктора и метода save() в students.h.
#pragma once /* Защита от двойного подключения заголовочного файла */
#include <string>
class Students {
public:
void save();
~Students();
Students(std::string, std::string);
void set_name(std::string);
std::string get_name();
void set_last_name(std::string);
std::string get_last_name();
void set_scores(int []);
int *get_scores();
std::string get_scores_str(char);
void set_average_ball(float);
float get_average_ball();
private:
int scores[5];
float average_ball;
std::string name;
std::string last_name;
};
И определим эти функции в students.cpp.
#include <string>
#include <fstream>
#include "students.h"
Students::~Students()
{
Students::save();
}
void Students::save()
{
std::ofstream fout("students.txt", std::ios::app);
fout << Students::get_name() << " "
<< Students::get_last_name() << " ";
for (int i = 0; i < 5; ++i) {
fout << Students::scores[i] << " ";
}
fout << std::endl;
fout.close();
}
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.

|