П'ятниця, 19.04.2024, 20:44
Гость

Мішатронік

Мобільна версія | Додати у вибране  | Мій профіль | Вихід | RSS |
Меню сайту
Наше опитування
Java чи С++
Всього відповідей: 2
Статистика

Онлайн всього: 1
Гостей: 1
Користувачів: 0


В этом уроке мы более детально познакомимся с деструкторами класса, а также научимся работать с файлами в потоковом режиме, с помощью библиотеки fstream. Продолжим написание программы учета оценок.

Деструктор Students

Логично было бы сохранять все оценки после того, как работа со студентом закончена. Для этого создадимдеструктор класса Students, который будет вызывать метод save() перед уничтожением объекта.

// Деструктор Students
Students::~Students()
{
 Students::save();
}

Добавим прототипы деструктора и метода save() в students.h.

/* students.h */
#pragma once /* Защита от двойного подключения заголовочного файла */
#include <string>

class Students {
 public:
 // Запись данных о студенте в файл
 void save();
 // Деструктор класса Students
 ~Students();

 // Конструктор класса 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.

/* students.cpp */
#include <string>
#include <fstream>

#include "students.h"

// Деструктор Students
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::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.

 

Форма входа
Пошук
Друзі сайту
Календар
«  Квітень 2024  »
ПнВтСрЧтПтСбНд
1234567
891011121314
15161718192021
22232425262728
2930

Єдина Країна! Единая Страна!