В этом уроке мы более детально познакомимся с деструкторами класса, а также научимся работать с файлами в потоковом режиме, с помощью библиотеки 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 .
|