Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
О.О.П / Лабораторні роботи / 17_наследование у.doc
Скачиваний:
8
Добавлен:
30.05.2020
Размер:
84.99 Кб
Скачать

Лабораторна робота № 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