Неділя, 05.05.2024, 19:32
Гость

Мішатронік

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

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


Наследование позволяет избежать дублирования лишнего кода при написании классов. Пусть в базе данных ВУЗа должна храниться информация о всех студентах и преподавателях. Представлять все данные в одном классе не получится, поскольку для преподавателей нам понадобится хранить данные, которые для студента не применимы, и наоборот.

Создание базового класса

Для решения этой задачи создадим базовый класс human, который будет описывать модель человека. В нем будут храниться имя, фамилия и отчество.

Создайте файл human.h:

// human.h
#ifndef HUMAN_H_INCLUDED
#define HUMAN_H_INCLUDED

#include <string>
#include <sstream>

class human {
 public:
 // Конструктор класса human
 human(std::string last_name, std::string name, std::string second_name)
 {
 this->last_name = last_name;
 this->name = name;
 this->second_name = second_name;
 }

 // Получение ФИО человека
 std::string get_full_name()
 {
 std::ostringstream full_name;
 full_name << this->last_name << " "
 << this->name << " "
 << this->second_name;
 return full_name.str();
 }

 private:
 std::string name; // имя
 std::string last_name; // фамилия
 std::string second_name; // отчество
};

#endif // HUMAN_H_INCLUDED

Наследование от базового класса

Теперь создайте новый класс student, который будет наследником класса human. Поместите его в файлstudent.h.

// student.h
#ifndef STUDENT_H_INCLUDED
#define STUDENT_H_INCLUDED

#include "human.h"
#include <string>
#include <vector>

class student : public human {
 public:
 // Конструктор класса Student
 student(
 std::string last_name,
 std::string name,
 std::string second_name,
 std::vector<int> scores
 ) : human(
 last_name,
 name,
 second_name
 ) {
 this->scores = scores;
 }

 // Получение среднего балла студента
 float get_average_score()
 {
 // Общее количество оценок
 unsigned int count_scores = this->scores.size();
 // Сумма всех оценок студента
 unsigned int sum_scores = 0;
 // Средний балл
 float average_score;

 for (unsigned int i = 0; i < count_scores; ++i) {
 sum_scores += this->scores[i];
 }

 average_score = (float) sum_scores / (float) count_scores;
 return average_score;
 }

 private:
 // Оценки студента
 std::vector<int> scores;
};
#endif // STUDENT_H_INCLUDED

Функция get_average_score вычисляет среднее арифметическое всех оценок студента. Все публичные свойства и методы класса human будут доступны в классе student.

 

 

Форма входа
Пошук
Друзі сайту
Календар
«  Травень 2024  »
ПнВтСрЧтПтСбНд
  12345
6789101112
13141516171819
20212223242526
2728293031

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