В этом уроке мы более детально познакомимся с конструкторами класса, а также научимся работать с файлами в потоковом режиме, с помощью библиотеки fstream . Продолжим написание программы учета оценок.
Конструктор Students
Добавим в класс Students конструктор, который будет принимать имя и фамилию ученика, и сохранять эти значения в соответствующих переменных класса.
Students::Students(std::string name, std::string last_name)
{
Students::set_name(name);
Students::set_last_name(last_name);
}
При создании нового объекта, мы должны передать конструктору имя и фамилию студента. Иначе компиляция программы завершится с ошибкой.
std::string name = "Василий";
std::string last_name = "Пупкин";
Students *student = new Students(name, last_name);
Теперь добавим прототип конструктора в файл students.h .
#pragma once /* Защита от двойного подключения заголовочного файла */
#include <string>
class Students {
public:
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 []);
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(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];
}
}
void Students::set_average_ball(float ball)
{
Students::average_ball = ball;
}
float Students::get_average_ball()
{
return Students::average_ball;
}
В main() мы принимаем от пользователя имя и фамилию ученика, и сохраняем их во временных локальных переменных. После этого создаем новый объект класса Students , передавая его конструктору эти переменные.
#include <iostream>
#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->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;
delete student;
return 0;
}
|