Лабораторна робота № 17
Тема: Програмування з використанням успадкування класів
Мета роботи:
1 ) вивчити можливість успадкування класів на мові С + + ;
2 ) отримати основні навички програмування з використанням успадкування класів.
Теоретичні відомості
Клас може успадковувати характеристики і поведінку одного або декількох базових класів, привносячи нові властивості. Перед тим, як проектувати новий клас, треба визначити, якими найбільш загальними рисами повинні володіти його об'єкти, і з'ясувати, чи немає вже готового схожого класу. Далі, від загального плану класу, поступово деталізуючи його, будувати новий.
Основна форма успадкування:
class ім’я_ наслідуваного _класу : режим_доступу успадковуєючий_клас.. ;
У мові C + + прийнято називати наслідуваний клас базовим класом, успадковуєючий клас - похідним класом. Режім_доступа - це одне з ключових слів private, public або protected. Опція public означає, що всі елементи типу public предка будуть типу public для класу, який наследує його. Загальні ( public ) елементи можуть бути доступні іншим функцій програми. Приватний ( private ) елементи недоступні для похідного класу, а доступні тільки функціям - членам класу або дружнім ( friend ) функціям. Захищені ( protected ) елементи також можуть бути доступні тільки функціям - членам класу або дружнім функціям.
наприклад:
class X / / Базовий клас X
{ Int i ;
int j ;
public :
void get_f ( void ) ;
void put_f ( void ) ;
} ;
class Y : public X / / Похідний клас Y
{ Int m ;
public :
int get_m ( void ) ;
void make_m ( void ) ;
} ;
Тут Х - базовий клас, Y - похідний клас. Функції- члени класу Y можуть використовувати загальні функції get_f ( ) і put_f ( ), але вони не можуть використовувати i і j, так як вони приватні для Х і, відповідно, недоступні для функцій get_m ( ), put_m ( ) класу Y.
Можна забезпечити доступ членів - функцій класу Y до елементів i та j класу Х. Для цього в класі Х треба оголосити їх захищеними - protected :
class X
{ Protected :
int i ;
int j ;
public :
Void get_f ( void ) ;
void put_f ( void ) ;
} ;
class Y : public X
{ Int m ;
public :
Int get_m ( void ) ;
void make_m ( void ) ;
} ;
Тепер члени класу Y мають доступ до членів i, j класу Х. Водночас i, j залишаються недоступними для іншої частини програми. Доступ успадковується до елементів, оголошеним захищеними або загальними, але не успадковується для приватних елементів.
Приклад. Нехай вже є такі класи як NAME (містить дані про ім'я людини) і JOB (членами-даними якого є місце роботи людини і його посада) і необхідно створити клас, що містить більш повну інформацію про співробітника деякої компанії, то крім перерахованої інформації потрібно включити вік і стать. Очевидно, зручно новий клас PERSON зробити спадкоємцем вже наявних класів NAME і JOB.
Приклад: Створимо клас «студент» і клас-спадкоємець «викладач».
class Student // Опис класів
{ protected:
char name[50]; // ПІБ
int age; // вік
char sex[50]; // стать
public: Student(char n[],int a,char s[]);
public: void about(void); // Функція виведення інформації
};
class Teach: public Student
{ char subject[50]; // предмет, що викладається
public: Teach (char n[50],int a,char s[50],char su[50]);
public: void about(void);
};
//-------- звична частина програми -------
#include<stdio.h>
#include<conio.h>
#include<string.h>
//--------------class Student---------------------- // реалізація функцій класів
Student::Student(char n[50],int a,char s[50])
{ strcpy(name,n); age=a; strcpy(sex,s);}
void Student::about(void) // функція виведення інформації
{ gotoxy(10,4); printf("ФИО : %s",name);
gotoxy(10,6); printf("Возраст : %d",age);
gotoxy(10,8); printf("Пол : %s",sex);}
//-----------------class Teach--------------( спадкоємець Student'a)
Teach::Teach(char n[50],int a,char s[50],char su[50]): Student(n,a,s) // використовуємо клаcc Student
{ strcpy(subject,su); } // і додаємо новий член -subject