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();

}

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

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

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


 

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

67900. ПРИЧИНУ РОСТА ПРЕСТУПНОСТИ НАЗЫВАЕТ ХРИСТИАНСКАЯ АНТРОПОЛОГИЯ 130 KB
  Последние открытия генетиков и расшифровка генома человека позволили сделать вывод что почти все социальные проявления разумеется и преступное поведение человека запрограммированы. составила 296 против 345 в 1997 году безработных с другой а совсем в другом не во внешних обстоятельствах...
67901. СРАВНИТЕЛЬНЫЙ АНАЛИЗ СТАТУСА АДМИНИСТРАТИВНО-ТЕРРИТОРИАЛЬНЫХ ЕДИНИЦ В РОССИЙСКОЙ ФЕДЕРАЦИИ 81 KB
  В настоящее время административная карта Российской Федерации насчитывает 1863 района 650 городов республиканского областного краевого окружного подчинения 318 городских районов и округов более 400 городов районного подчинения около двух тысяч поселков городского типа и свыше 24 тысяч...
67902. ОСОБЕННОСТИ РЕАЛИЗАЦИИ СОВРЕМЕННОГО ЛИЦЕНЗИОННОГО ЗАКОНОДАТЕЛЬСТВА 260.5 KB
  О лицензировании отдельных видов деятельности который с одной стороны ограничил круг органов которые могут осуществлять лицензирование ст. Уменьшение числа лицензируемых видов деятельности следует связывать с появлением понимания ограничительной роли лицензионной системы и выявлением в ходе...
67903. СИСТЕМА ЛИЦЕНЗИРОВАНИЯ В МЕХАНИЗМЕ ВОЗДЕЙСТВИЯ НА ПОВЕДЕНИЕ СУБЪЕКТОВ ПРАВОВЫХ ОТНОШЕНИЙ 104.5 KB
  Общая часть объединяет нормы лицензионного права определяющие критерии выделения объектов лицензирования правовой статус субъектов лицензионных правоотношений в том числе полномочия лицензионных органов принципы лицензионного права сферу действия лицензионного законодательства...
67904. МЕРЫ АДМИНИСТРАТИВНОГО ПРЕСЕЧЕНИЯ, ПРИМЕНИМЫЕ К НЕСОВЕРШЕННОЛЕТНИМ, В СФЕРЕ ОХРАНЫ ОБЩЕСТВЕННОГО ПОРЯДКА 48 KB
  Данные меры иногда становятся единственно возможным средством предупреждения и пресечения преступлений и иных правонарушений со стороны несовершеннолетних лиц. Состояние и динамика преступности и правонарушений несовершеннолетних вызывает тревогу. Например, в 2000 г. отмечен небывалый рост преступности несовершеннолетних.
67905. ПРАВОМЕРНОСТЬ И НЕПРАВОМЕРНОСТЬ НЕДЕЙСТВИТЕЛЬНЫХ СДЕЛОК 68.5 KB
  Шахматов писал что неверно относить к неправомерным действиям сделки совершенные под влиянием заблуждения. Одна из сторон заблуждается при определении предмета либо правовой природы сделки но это не является неправомерным. При совершении сделки лицом полностью или частично ограниченным...
67906. ЗАМЕЧАНИЯ К ПРОЕКТУ КОНСТИТУЦИОННОГО АКТА СОЮЗНОГО ГОСУДАРСТВА 39 KB
  Вызывает возражение само название документа его правовая природа. Предлагаю назвать его Конституция либо вернуться к незаслуженно забытому в наших государствах термину Основной Закон. Но при этом возникает вопрос: почему об этом не сказано в преамбуле проекта...
67907. ПОНЯТИЕ И СОДЕРЖАНИЕ АДМИНИСТРАТИВНО-ПРАВОВОГО СТАТУСА ОБЩЕСТВЕННЫХ ОБЪЕДИНЕНИЙ В РОССИЙСКОЙ ФЕДЕРАЦИИ 78 KB
  Последняя проблема как показало исследование наиболее значима для жизнедеятельности нашего общества; это обусловлено тем что общественные объединения являются важной составной частью правового государства выступают связующим элементом между государством и личностью.
67908. ИСТОРИЧЕСКИЕ ПРЕДПОСЫЛКИ СТАНОВЛЕНИЯ ГОСУДАРСТВЕННОЙ СЛУЖБЫ В РОССИИ 81.5 KB
  Развитие и реформирование государственной службы в современной России должно опираться на тот опыт который был накоплен в данной сфере в течение предшествующих периодов развития отечественной государственности. Специфические черты государственной службы в России обусловлены всем ходом ее исторического...