Александр Ануфриев
Offline, последняя активность Сегодня 00:00:09 С компьютера
Санкт-Петербург
Рак - Гороскоп (2.7.)

398

627

38

?

?

друзья подписчики изменения скрывающие скрытые

Кого добавил в друзья и на кого подписался Александр Ануфриев. Новые подписчики.

Обновляем изменения в друзьях...



Для оперативного получения новой информации добавьте эту страницу в закладки. (На компьютере Ctrl+D)

Открытые анкетные данные Ануфриева Александра:


Упоминание Александра Ануфриева в коментариях и постах


Продолжаем изучать классы

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

Конструктор Students
Добавим в класс Students конструктор, который будет принимать имя и фамилию ученика, и сохранять эти значения в соответствующих переменных класса.
При создании нового объекта, мы должны передать конструктору имя и фамилию студента. Иначе компиляция программы завершится с ошибкой.
Теперь добавим прототип конструктора в файл students.h.
В файле students.cpp определим сам конструктор.
В main() мы принимаем от пользователя имя и фамилию ученика, и сохраняем их во временных локальных переменных. После этого создаем новый объект класса Students, передавая его конструктору эти переменные.

/* main.cpp */
#include
#include "students.h"

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

#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.


Сайт не являеет официальным сайтом вКонтакте
Политика обработки персональных данных
Время выполнения скрипта: 0.63897514343262 сек.