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

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