Неділя, 21.04.2019, 23:57
Гость

Мішатронік

Автор - Кренцін Михайло

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

Онлайн всього: 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.

 

 

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


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