Вам бонус- начислено 1 монета за дневную активность. Сейчас у вас 1 монета

Глава 2. Наследование, полиморфизм и виртуальные функции 2.1. Определение производного класса кратко

Лекция



Привет, сегодня поговорим про наследование полиморфизм, обещаю рассказать все что знаю. Для того чтобы лучше понимать что такое наследование полиморфизм, виртуальные функции, определение производного класса , настоятельно рекомендую прочитать все из категории С++ (C plus plus).

Наследование- это механизм получения нового класса на основе уже существующего. Существующий класс может быть дополнен или изменен для создания нового класса.

Существующие классы называются базовыми, а новые – производными. Производный класс наследует описание базового класса; затем он может быть изменен добавлением новых членов, изменением существующих функций- членов и изменением прав доступа. Таким образом, наследование позволяет повторно использовать уже разработанный код, что повышает производительность программиста и уменьшает вероятность ошибок. С помощью наследования может быть создана иерархия классов, которые совместно используют код и интерфейсы.

Наследуемые компоненты не перемещаются в производный класс, а остаются в базовых классах. Сообщение, обработку которого не могут выполнить методы производного класса, автоматически передается в базовый класс. Если для обработки сообщения нужны данные, отсутствующие в производном классе, то их пытаются отыскать автоматически и незаметно для программиста в базовом классе.При наследовании некоторые имена методов и данных базового класса могут быть по-новому определены в производном классе. В этом случае соответствующие компоненты базового класса становятся недоступными из производного класса. Для доступа к ним используется операция указания области видимости ‘ : : ’.

В иерархии производный объект наследует разрешенные для наследования компоненты всех базовых объектов (public, protected).

Допускается множественное наследование – возможность для некоторого класса наследовать компоненты нескольких никак не связанных между собой базовых классов. В иерархии классов соглашение относительно доступности компонентов класса следующие:

private Член класса может использоваться только функциями- членами данного класса и функциями- “друзьями” своего класса. В производном классе он недоступен.

protected – То же, что и private, но дополнительно член класса с данным атрибутом доступа может использоваться функциями- членами и функциями- “друзьями” классов, производных от данного.

public – Член класса может использоваться любой функцией, которая является членом данного или производного класса, а также к public - членам возможен доступ извне через имя объекта.

Следует иметь в виду, что объявление friend не является атрибутом доступа и не наследуется.

Синтаксис определение производного класса :

class имя_класса : список_базовых_классов

{список_компонентов_класса};

В производном классе унаследованные компоненты получают статус доступаprivate, если новый класс определен с помощью ключевого слова class, и статусpublic, если с помощью struct

Например.

а) class S : X,Y,Z{. Об этом говорит сайт https://intellect.icu . . .};

S – производный класс;

X,Y,Z – базовые классы.

Здесь все унаследованные компоненты классов X,Y,Z в классе A получают статус доступа private.

б) struct S : X,Y,Z{. . .};

S – производный класс;

X,Y,Z – базовые классы.

Здесь все унаследованные компоненты классов X,Y,Z в классе A получают статус доступа public.

Явно изменить умалчиваемый статус доступа при наследовании можно с помощью атрибутов доступа – private, protected и public, которые указываются непосредственно перед именами базовых классов. Как изменяются при этом атрибуты доступа в производном классе показано в следующей таблице

атрибут, указанный при наследовании
атрибут в базовом классе
атрибут, полученный в производном классе
public

public

protected

public

protected

protected

public

protected

protected

protected

private

public

protected

private

private

Глава 2. Наследование, полиморфизм и виртуальные функции 2.1. Определение производного класса

рис. Взаимосвязь классов при наследовании

Пример 2.1.1


Пример 2.1.1

class B {

protected: int t;

public: char u;

private: int x;

};

struct S : B{ }; // наследуемые члены t, u имеют атрибут доступа public

class E : B{ }; // t, u имеют атрибут доступа private

class M : protected B{ }; // t, u – protected.

class D : public B{ }; // t – protected, u – public

class P : private B{ }; // t, u – private

Таким образом, можно только сузить область доступа, но не расширить.

Таким образом, внутри производного класса существует четыре уровня, для которых определяется атрибут доступа:

·для членов базового класса;

·для членов производного класса;

·для процесса наследования;

·для изменения атрибутов при наследовании.

Рассмотрим как при этом регулируется доступ к членам класса извне класса и внутри класса.

Доступ извне.

Доступными являются лишь элементы с атрибутом public.

·Собственные члены класса.

Доступ регулируется только атрибутом доступа, указанным при описании класса.

·Наследуемые члены класса.

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

Пример 2.1.2

Пример 2.1.2

class Basis{

public:

int a,b;

protected:

int c;};

class Derived:public Basis{

public:

Basis::a;};

void main(){

Basis ob;

Derived od;

ob.a; //правильно

ob.c; //ошибка

od.a; //правильно

od.b; //ошибка

Доступ изнутри.

·Собственные члены класса.

Доступ извне возможен только для public-членов класса.

private и protected-члены класса могут быть использованы только функциями- членами данного класса.

·Наследуемые члены класса.

private- члены класса могут использоваться только собственными функциями- членами базового класса, но не функциями членами производного класса.

protected или public-члены класса доступны для всех функций-членов. Подразделение на public, protected и private относится при этом к описаниям, приведенным в базовом классе, независимо от формы наследования.

Пример 2.1.3

Пример 2.1.3

class Basis{

int a;

public b;

void f1(int i){a=i;b=i;}

class Derived:private Basis{

public:

void f2(int i){

a=i; //ошибка

b=i;} // //правильно

};

Вау!! 😲 Ты еще не читал? Это зря!

В общем, мой друг ты одолел чтение этой статьи об наследование полиморфизм. Работы впереди у тебя будет много. Смело пиши комментарии, развивайся и счастье окажется в твоих руках. Надеюсь, что теперь ты понял что такое наследование полиморфизм, виртуальные функции, определение производного класса и для чего все это нужно, а если не понял, или есть замечания, то не стесняйся, пиши или спрашивай в комментариях, с удовольствием отвечу. Для того чтобы глубже понять настоятельно рекомендую изучить всю информацию из категории С++ (C plus plus)

Из статьи мы узнали кратко, но содержательно про наследование полиморфизм
создано: 2015-12-20
обновлено: 2021-12-20
147



Рейтиг 9 of 10. count vote: 2
Вы довольны ?:


Поделиться:

Найди готовое или заработай

С нашими удобными сервисами без комиссии*

Как это работает? | Узнать цену?

Найти исполнителя
$0 / весь год.
  • У вас есть задание, но нет времени его делать
  • Вы хотите найти профессионала для выплнения задания
  • Возможно примерение функции гаранта на сделку
  • Приорететная поддержка
  • идеально подходит для студентов, у которых нет времени для решения заданий
Готовое решение
$0 / весь год.
  • Вы можите продать(исполнителем) или купить(заказчиком) готовое решение
  • Вам предоставят готовое решение
  • Будет предоставлено в минимальные сроки т.к. задание уже готовое
  • Вы получите базовую гарантию 8 дней
  • Вы можете заработать на материалах
  • подходит как для студентов так и для преподавателей
Я исполнитель
$0 / весь год.
  • Вы профессионал своего дела
  • У вас есть опыт и желание зарабатывать
  • Вы хотите помочь в решении задач или написании работ
  • Возможно примерение функции гаранта на сделку
  • подходит для опытных студентов так и для преподавателей

Комментарии


Оставить комментарий
Если у вас есть какое-либо предложение, идея, благодарность или комментарий, не стесняйтесь писать. Мы очень ценим отзывы и рады услышать ваше мнение.
To reply

С++ (C plus plus)

Термины: С++ (C plus plus)