- •Лабораторная работа № 4
- •1. Цель работы
- •2. Краткие теоретические сведения
- •2.2. Свойства класса
- •2.3. Методы класса
- •2.4. Специальные методы класса: конструктор и деструктор
- •3. Наследование
- •4. Пример создания иерархии из трех классов
- •4.1 Решение
- •4.2. Программные коды файлов
- •4.3 Результат работы программы
- •9. Контрольные вопросы
4. Пример создания иерархии из трех классов
Разработать иерархию классов, содержащую один базовый класс CStudent и два производных класса CGood_Student и CBad_Student. Создать объекты классов и вызвать все доступные для них методы разработанных классов. Свойства и методы базового класса должны быть наследованы производным классом.
Состав классов.
1)Базовый класс CStudent.
Свойства класса:
курс;
средний балл;
ФИО.
Методы класса:
конструктор: присвоение нулевых значений свойствам класса;
функция ввода значений пользователем в свойства класса;
функция вывода значений свойств класса на экран.
2)Производный класс CGood_Student.
Свойства класса:
курс;
средний балл;
ФИО;
стипендия.
Методы класса:
конструктор: присвоение нулевых значений числовым свойствам класса;
функция ввода значений пользователем в свойства класса;
функция определения размера стипендии;
функция вывода размера стипендии на экран;
функция вывода значений свойств класса на экран.
3)Производный класс CBad_Student.
Свойства класса:
курс;
средний балл;
ФИО;
количество долгов.
Методы класса:
конструктор: присвоение нулевых значений числовым свойствам класса;
функция ввода значений пользователем во все свойства класса;
функция вывода значений всех свойств класса на экран.
4.1 Решение
Определим наследуемые элементы для производных классов.
Класс CGood_Student наследует все свойства и методы базового класса CStudent и будет дополнен новым свойством для хранения данных о стипендии и новыми методами для определения стипендии и ее вывода стипендии на экран.
Класс CBad_Student наследует все свойства базового класса CStudent. А методы ввода вывода данных будут переопределены заново для работы со всеми свойствами производного класса, что соответствует принципу объектно-ориентированного программирования под названием полиморфизм.
Конструктор каждого производного класса должен быть дополнен оператором обнуления добавленного в его описание свойства.
4.2. Программные коды файлов
Описание каждого из классов размещаем в отдельном заголовочном файле с расширением «*.h».
//!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!student.h!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
#include <stdio.h>
class CStudent
{protected:
int course;
float sr_ball;
char fio[30];
public:
CStudent()
{course = 1;
sr_ball = 0;
}
void input()
{printf("Vvedite course, sr. ball and fio\n");
scanf("%i %f %s", &course, &sr_ball, fio);
}
void print_data()
{printf("Course = %i, sr. ball = %5.1f and fio = %s\n", course, sr_ball, fio);
}
};// закрываем оператор объявления класса
//!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!good.h!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
#include <stdio.h>
class CGood_Student: public CStudent
{protected:
float stip;
public:
CGood_Student ()
{stip = 0;
}
void give_stip()
{if (sr_ball>=4) stip = 10;
if (sr_ball == 5) stip = 20;
}
void print_stip()
{printf ("Stipendia = %7.2f\n", stip);
}
};// закрываем оператор объявления класса
//!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!bad.h!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
#include <stdio.h>
class CBad_Student: public CStudent
{protected:
int dolg;
public:
CBad_Student()
{dolg = 1;
}
void input()
{printf("\nInput from CBad_Student\nVvedite course, sr. ball, kol-vo dolgov and fio\n");
scanf("%i %f %i", &course, &sr_ball,&dolg);
getchar(fio);// считывание из потока символа перехода на новую строку,
//введенного с клавиатуры в предыдущем операторе
gets(fio);
}
void print_data()
{printf("\nOutput from CBad_Student\Course = %i, sr. ball = %5.1f, dolgov = %i and fio = %s\n", course, sr_ball, dolg, fio);
}
};// закрываем оператор объявления класса
Создадим файл для работы с объектами разработанных классов CStudent, CGood_Student и CBad_Student.
//!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!nasledovanie.cpp!!!!!!!!!!!!!!!!!!!!!!!!
#include <stdio.h>
#include "student.h"
#include "good.h"
#include "bad.h"
void main()
{ printf("\n!!!!!!!!!!!!!!!!!Class CStudent!!!!!!!!!!!!!!!!!!!!!\n");
CStudent st1;
st1.print_data();// полиморфизм
st1.input();// полиморфизм
st1.print_data();// полиморфизм
printf("\n!!!!!!!!!!!!!!!Class CGood_Student!!!!!!!!!!!!!!!!!!\n");
CGood_Student st2;
st2.input();//наследование, полиморфизм
st2.print_data();//наследование, полиморфизм
st2.give_stip();
st2.print_stip();
printf("\n!!!!!!!!!!!!!!!Class CBad_Student!!!!!!!!!!!!!!!!!!!\n");
CBad_Student st3;
st3.input();// полиморфизм
st3.print_data();// полиморфизм
}