4967

Наследование как основа создания иерархии классов

Лекция

Информатика, кибернетика и программирование

Наследование как основа создания иерархии классов Наследование Наследование – создание новых классов на основе ранее созданных классов. Класс, на основании которого формируется новый класс, называют базовым (родительским) классом. Новый класс...

Русский

2012-11-30

22.18 KB

6 чел.

Наследование как основа создания иерархии классов

Наследование

Наследование – создание новых классов на основе ранее созданных классов.

Класс, на основании которого формируется новый класс, называют базовым (родительским) классом.

Новый класс, созданный на основе ранее созданного базового класса, называют производным классом.

Производный класс формируется путем добавления к элементам данных и функциям базового класса новых элементов данных и функций.

Главное достоинство наследования – отсутствие необходимости многократно переписывать функции, являющихся общими для многих классов.

Виды наследования

Различают два вида наследования:

От частного к общему. Такой вид наследования предполагает создание одного класса на базе нескольких.

От общего к частному. Такой вид наследования предполагает создание нескольких классов на базе одного.

Наиболее распространенным является способ наследования от общего к частному.

Наследование от общего к частному

При наследовании от общего к частному сначала разрабатывают базовый класс, который описывает объекты с наиболее общими свойствами. Затем на основе базового класса разрабатывают производные классы. Таким образом создается древовидная иерархия классов.

Например, за наиболее общий базовый класс можно принять класс Человек. От него могут быть образованы производные классы Работник, Студент. От класса Работник могут быть образованы классы Начальник отдела, Инженер.

Защищенный доступ к элементам данных базового класса

При организации новых классов путем наследования возникает необходимость доступа к элементам данных базового класса из функций производного класса. Если элементы данных базового класса имеют закрытый доступ, то доступ к ним из производного класса производного класса невозможен. Чтобы функции производного класса могли работать с элементами данных базового класса, элементы данных базового класса должны иметь защищенный вид доступа protected:. Функции, не имеющие отношения к производным классам, доступа к защищенным элементам данных базового класса не имеют.

Описание производного класса на языке С++

class имя_прозводного_класса : public имя базового класса

{

}

Служебная метка public перед именем базового класса означает, что в производном классе доступ к элементам базового класса остается без изменений.

Пример описания производного класса на С++

Настоящий пример содержит описание производного класса Sotrudnik на основании ранее созданного базового класса Person. В начало файла включена директива включения заголовочного файла базового класса person.h, чтобы элементы данных и функции базового класса были видны внутри производного класса. Таким образом, элементы данных и функции производного класса добавляются к элементам данных базового класса.

#pragma once

#include "person.h"

class Sotrudnik :

 public Person

{

public:

Sotrudnik(void);

~Sotrudnik(void);

private:

 // Зарплата

 float Zplata;

public:

 // Конструктор с параметрами

 Sotrudnik(char* Fio1, int Age1, float Zplata1);

 // конструктор копирования

Sotrudnik(Sotrudnik& S1);

 // Функция печати на экране

 void Print(void);

 // Ввод с клавиатуры

 void Input(void);

 // Измерение зарплаты

 void SetZplata(float Zplata1);

 // Извлечение значения элемента данных зарплата

 float GetZplata(void);

 // Измерение всех элементов данных

 void SetAll(char* Fio1, int Age1, float Zplata1);

};

#include "StdAfx.h"

#include ".\sotrudnik.h"

Sotrudnik::Sotrudnik(void)

: Zplata(0)

{

}

Sotrudnik::~Sotrudnik(void)

{

}

// Конструктор с параметрами

Sotrudnik::Sotrudnik(char* Fio1, int Age1, float Zplata1)

{

Zplata=Zplata1;

Person::SetAll(Fio1,Age1);

}

// конструктор копирования

Sotrudnik::Sotrudnik(Sotrudnik& S1)

{

Zplata=S1.Zplata;

Person::SetAll(S1.Fio,S1.Age);

}

// Функция печати на экране

void Sotrudnik::Print(void)

{

 //Person::Print();

 //printf("Zarplata %.2f\n",Zplata);

printf("Fio=%s Age=%d Zarplata %.2f\n",Fio,Age,Zplata);

}

// Ввод с клавиатуры

void Sotrudnik::Input(void)

{

Person::Input();

printf("Vvedite Zplata");

scanf("%f",&Zplata);

}

// Измерение зарплаты

void Sotrudnik::SetZplata(float Zplata1)

{

Zplata1=Zplata;

}

// Извлечение значения элемента данных зарплата

float Sotrudnik::GetZplata(void)

{

 return Zplata;

}

// Измерение всех элементов данных

void Sotrudnik::SetAll(char* Fio1, int Age1, float Zplata1)

{

Zplata1=Zplata;

Person::SetAll(Fio1, Age1);

}

#include "stdafx.h"

#include ".\person.h"

#include ".\sotrudnik.h"

main()

{

Person P1("Minin",23);

 

Sotrudnik S1;

Sotrudnik S2("Ivanov",25,100.7);

Sotrudnik S3(S2);

 

S1.Input();

S1.Print();

S2.Print();

S3.Print();

S2.SetAll("Sidorov",40,200.50);

S2.Print();

 P1.Print();

}

Рассмотренный пример показывает следующие особенности создания классов путем наследования.

Конструктор с параметрами имеет в входные параметры как для заполнения элементов данных, определенных в производном классе, так и в базовом. Для заполнения элементов данных, определенных в базовом классе, вызываются готовые функции базового класса.

В остальных функциях также действия над элементами данных базового класса осуществляются с помощью функции базового класса.


 

А также другие работы, которые могут Вас заинтересовать

44442. Автоматизированная система управления «Лесхоз» 1.74 MB
  Офисный пакет приложений созданных корпорацией Microsoft для операционных систем Microsoft Windows и ppleMc OS X. В состав этого пакета входит программное обеспечение для работы с различными типами документов: текстами электронными таблицами базами данных и др. Ввод данных в связанный рабочий лист Microsoft Office Excel и просмотр того как эти данные немедленно представляются в диаграмме выбранного типа.
44443. Проект 10-ти этажного 40-ка квартирного жилого дома 1.76 MB
  Подсчёт объёмов конструктивных элементов и участков и удельных весов участков в общем объёме конструктивных элементов Чтобы повысить точность оценки рекомендуется разбивать конструктивные элементы на участки и оценивать каждый участок в отдельности. вес участков 1 Фундаменты: 1 участок: фундаменты наружных стен...
44444. Привод цепного транспортера 3.26 MB
  Моменты сопротивления сечения : под полумуфтой мм3 мм3; под подшипниками мм3 мм3; упорная ступень вала мм3 мм3; под червяком мм3 мм3. Напряжения изгиба : ступень под полумуфту начало участка Н мм2; ступень под полумуфту конец участка Н мм2; ступень под подшипник начало участка Н мм2; ступень под подшипник под подшипником Н мм2; ступень под подшипник конец участка Н мм2; упорная ступень начало участка Н мм2; упорная ступень конец участка Н мм2; ступень под червяком начало...
44445. Разработка приводной станции ленточного конвейера 1.21 MB
  Синтез передаточного механизма Исходные данные: Потребная мощность на приводном барабане Р = 38 кВт Частота вращения приводного вала nв = 30 об мин Диаметр приводного барабана Dб=500 мм Длина конвейера L=50 м Календарный срок службы Тк = 5 лет Ширина барабана В=650 мм Коэффициент использования в течении года Кг = 08 Коэффициент использования в течении суток Кс = 033 Определение ориентировочного передаточного отношения: общее передаточное отношение....
44446. Формирование рефлексии в младшем школьном возрасте 150.5 KB
  Изучить проблемы формирования рефлексии в младшем школьном возрасте. Дать характеристику рефлексии как психического феномена. Рассмотреть приемы формирования рефлексии в младшем школьном возрасте в учебной деятельности учащихся. Провести исследование для выявления формирования рефлексии у детей младшего школьного возраста с применением приемов.
44447. Разработка компьютерной игры «ПАКМАН» 1.08 MB
  Задачей этого курсового проекта является написание компьютерной игры «пакман». Основой задачей в игре является создание колобка, который будет поедать жёлтые шарики на игровом поле. Управление в игре производится с помощью клавиатуры, это позволяет изменять направление движения колобка
44448. Реализация клиент-серверного приложения (игры Собери двойку) 1.44 MB
  Информационное обеспечение Диаграмма прецедентов Это диаграмма на которой отражены отношения существующие между актерами и прецедентами. Диаграмма представлена в приложении А. Диаграмма классов Это статическая структурная диаграмма описывающая структуру системы она демонстрирует классы системы. Диаграмма представлена в приложении B.
44449. Возможные неисправности двигателей устанавливаемых на автомобили ВАЗ 2115, их причины и способы устранения 373 KB
  Крепежные отверстия для крепления головки блока выполнены с резьбой М12 x 125 мм. Различие только в длине болтов крепления головки к блоку цилиндров. Крепежные отверстия для крепления головки блока выполнены с резьбой М12 x 125 мм. Для крепления генератора использован новый кронштейн.
44450. Инструментально-штамповочный цех машиностроительного завода 4.34 MB
  Подкрановые балки Типы конструкций: Каркас железобетонный колонны фундаментные балки подкрановые балки Стены облегчённые металлические панели по серии 1.50893 Правила выполнения рабочей документации генеральных планов предприятий сооружений и жилищно-гражданских объектов Архитектурно-строительная часть: Фундаменты и фундаментные балки Фундаменты столбчатые монолитные из железобетона по серии 1. Фундаментные балки: Фундаментные балки железобетонные типа ФБ6 по серии 1.