SlideShare a Scribd company logo
1 of 14
Download to read offline
Модуль 3: Основные понятия объектно-ориентированного
программирования.
Темы лекции: Композиция и наследование.
Практическое задание: Наследование классов.
Тренер: Игорь Шкулипа, к.т.н.
C++ Базовый. Занятие 10
http://www.slideshare.net/IgorShkulipa 2
Композиция классов
Композиция – механизм для создания нового класса путем
объединения нескольких объектов существующих классов в
единое целое.
При агрегировании между классами действует «отношение
принадлежности»
⚫ У машины есть кузов, колеса и двигатель
⚫ У человека есть голова, руки, ноги и тело
⚫ У треугольника есть вершины
Вложенные объекты обычно объявляются закрытыми (private)
внутри класса-агрегата
http://www.slideshare.net/IgorShkulipa 3
Пример. Треугольник
class Point
{
public:
Point(double x, double y);
double GetX();
double GetY();
private:
double _x, _y;
};
class Triangle
{
public:
Triangle(Point p1, Point p2, Point p3);
Point GetPoint(int index);
double GetArea();
private:
Point _p1, _p2, _p3;
};
http://www.slideshare.net/IgorShkulipa 4
Наследование
Наследование – это механизм ООП, позволяющий описать новый
класс на основе уже существующего.
При наследовании свойства и функциональность родительского
класса наследуются новым классом.
Класс-наследник имеет доступ к публичным (public) и
защищенным (protected) методам и полям класса
родительского класса.
Класс-наследник может добавлять свои данные и методы, а
также переопределять методы базового класса
http://www.slideshare.net/IgorShkulipa 5
Основные термины
Родительский или базовый класс (класс-родитель) – класс,
выступающий в качестве основы при наследовании.
Класс-потомок (дочерний класс, класс-наследник) – класс,
образованный в результате наследования от родительского
класса.
Иерархия наследования – отношения между родительским
классом и его потомками.
Интерфейс класса – совокупность публичных методов класса,
доступная для использования вне класса. В интерфейсной
части данные обычно не размещают.
Реализация класса – совокупность приватных методов и
данных класса
http://www.slideshare.net/IgorShkulipa 6
Виды наследования
По типу наследования:
◦ Открытое (public) наследование
◦ Закрытое (private) наследование
◦ Защищенное (protected) наследование
По количеству базовых классов:
◦ Одиночное наследование (один базовый класс)
◦ Множественное наследование (два и более базовых классов)
http://www.slideshare.net/IgorShkulipa 7
Открытое наследование
class Point
{
private: double _x, _y;
...
}
class Figure
{
protected: Point _center;
public: Point GetCenter();
}
class Circle: public Figure
{
private: double _radius;
public: double GetArea();
}
class Triangle: public Figure
{
private: Point _a, _b, _c;
public: double GetArea();
}
Figure
Circle Triangle
http://www.slideshare.net/IgorShkulipa 8
Закрытое наследование
При закрытом наследовании открытые и защищенные поля и
методы родительского класса становятся закрытыми полями и
методами производного.
class List
{
public:
void AddElement(double value);
void RemoveElement(double value);
protected:
ListNode* _list;
};
class Stack: private List
{
public:
void Push(double value);
double Pop();
};
http://www.slideshare.net/IgorShkulipa 9
Защищенное наследование
При закрытом наследовании открытые и защищенные поля и
методы родительского класса становятся защищенными
полями и методами производного. То есть эти поля доступны
для дальнейшего наследования
class List
{
public:
void AddElement(double value);
void RemoveElement(double value);
protected:
ListNode* _list;
};
class Stack: protected List
{
public:
void Push(double value);
double Pop();
};
http://www.slideshare.net/IgorShkulipa 10
Множественное наследование
Язык C++ допускает наследование класса от более, чем одного
базового класса.
Такое наследование называют множественным.
При этом порожденный класс может обладать свойствами сразу
нескольких родительских классов.
Например, класс может реализовывать сразу несколько
интерфейсов или использовать несколько реализаций.
(!) На практике множественное наследование лучше не
использовать.
http://www.slideshare.net/IgorShkulipa 11
Вызов конструкторов при наследовании
В C++ при конструировании экземпляра класса-наследника
всегда происходит предварительный вызов конструктора
базового класса.
В C++ вызов конструктора базового класса происходит до
инициализации полей класса наследника.
Конструктор класса-наследника может явно передать
конструктору базового класса необходимы параметры при
помощи списка инициализации.
Если вызов конструктора родительского класса не указан явно в
списке инициализации, то компилятор пытается вызвать
конструктор по умолчанию класса-родителя.
http://www.slideshare.net/IgorShkulipa 12
Вызов деструкторов при наследовании
В C++ деструкторы вызываются обратно порядку вызова
конструкторов.
Сначала вызывается деструктор класса-наследника, затем
деструктор базового класса и т.д. вверх по иерархии классов.
http://www.slideshare.net/IgorShkulipa 13
Перегрузка методов
В C++ метод производного класса замещает собой все методы родительского
класса с тем же именем
Количество и типы аргументов значения не имеют.
Для вызова метода родительского класса из метода класса наследника
используется обращение к методу базового класса с помощью операции «::»
class Base{
public:
void Print()
{ cout << "Base::Printn“; }
void Print(int param)
{ cout << "Base::Print " <<
param << "n“; }
};
class Derived : public Base {
public:
void Print(int param)
{
Base::Print(param);
cout << "Derived::Print " <<
param << "n";
}
};
http://www.slideshare.net/IgorShkulipa 14
Лабораторная работа №10. Наследование
Создать класс «Список». На основе этого класса создать классы-
наследники - «Стек» и «Очередь».
Создать приложение для демонстрации работы классов.

More Related Content

What's hot

C# Desktop. Занятие 01.
C# Desktop. Занятие 01.C# Desktop. Занятие 01.
C# Desktop. Занятие 01.Igor Shkulipa
 
Java Core. Lecture# 1. Intro
Java Core. Lecture# 1. IntroJava Core. Lecture# 1. Intro
Java Core. Lecture# 1. IntroAnton Moiseenko
 
Java Core. Lecture# 2. Classes & objects.
Java Core. Lecture# 2. Classes & objects.Java Core. Lecture# 2. Classes & objects.
Java Core. Lecture# 2. Classes & objects.Anton Moiseenko
 
C++ Базовый. Занятие 02.
C++ Базовый. Занятие 02.C++ Базовый. Занятие 02.
C++ Базовый. Занятие 02.Igor Shkulipa
 
C# Desktop. Занятие 02.
C# Desktop. Занятие 02.C# Desktop. Занятие 02.
C# Desktop. Занятие 02.Igor Shkulipa
 
Lec 2 Java
Lec 2 JavaLec 2 Java
Lec 2 Javaitc73
 
Лекция 6_принципы ООП : инкапсуляция, наследование
Лекция 6_принципы ООП : инкапсуляция, наследованиеЛекция 6_принципы ООП : инкапсуляция, наследование
Лекция 6_принципы ООП : инкапсуляция, наследованиеmetaform
 
Java core-lect6-part3-annotation.ppt
Java core-lect6-part3-annotation.pptJava core-lect6-part3-annotation.ppt
Java core-lect6-part3-annotation.pptAnton Moiseenko
 
Java Core. Lecture# 3. Part# 3. Multithreading.
Java Core. Lecture# 3. Part# 3. Multithreading.Java Core. Lecture# 3. Part# 3. Multithreading.
Java Core. Lecture# 3. Part# 3. Multithreading.Anton Moiseenko
 
C++ Базовый. Занятие 05.
C++ Базовый. Занятие 05.C++ Базовый. Занятие 05.
C++ Базовый. Занятие 05.Igor Shkulipa
 
принципы ооп и программирование классов в C#
принципы ооп и программирование классов в C#принципы ооп и программирование классов в C#
принципы ооп и программирование классов в C#bolevik
 
Java core-lect6-part2-reflection-api.ppt
Java core-lect6-part2-reflection-api.pptJava core-lect6-part2-reflection-api.ppt
Java core-lect6-part2-reflection-api.pptAnton Moiseenko
 
C++ осень 2013 лекция 3
C++ осень 2013 лекция 3C++ осень 2013 лекция 3
C++ осень 2013 лекция 3Technopark
 

What's hot (16)

C# Desktop. Занятие 01.
C# Desktop. Занятие 01.C# Desktop. Занятие 01.
C# Desktop. Занятие 01.
 
Java Core. Lecture# 1. Intro
Java Core. Lecture# 1. IntroJava Core. Lecture# 1. Intro
Java Core. Lecture# 1. Intro
 
Java Core. Lecture# 2. Classes & objects.
Java Core. Lecture# 2. Classes & objects.Java Core. Lecture# 2. Classes & objects.
Java Core. Lecture# 2. Classes & objects.
 
C++ Базовый. Занятие 02.
C++ Базовый. Занятие 02.C++ Базовый. Занятие 02.
C++ Базовый. Занятие 02.
 
C# Desktop. Занятие 02.
C# Desktop. Занятие 02.C# Desktop. Занятие 02.
C# Desktop. Занятие 02.
 
Lec 2 Java
Lec 2 JavaLec 2 Java
Lec 2 Java
 
Лекция 6_принципы ООП : инкапсуляция, наследование
Лекция 6_принципы ООП : инкапсуляция, наследованиеЛекция 6_принципы ООП : инкапсуляция, наследование
Лекция 6_принципы ООП : инкапсуляция, наследование
 
Lec 2
Lec 2Lec 2
Lec 2
 
Java core-lect6-part3-annotation.ppt
Java core-lect6-part3-annotation.pptJava core-lect6-part3-annotation.ppt
Java core-lect6-part3-annotation.ppt
 
Классы и объекты С#
Классы и объекты С#Классы и объекты С#
Классы и объекты С#
 
Java Core. Lecture# 3. Part# 3. Multithreading.
Java Core. Lecture# 3. Part# 3. Multithreading.Java Core. Lecture# 3. Part# 3. Multithreading.
Java Core. Lecture# 3. Part# 3. Multithreading.
 
C++ Базовый. Занятие 05.
C++ Базовый. Занятие 05.C++ Базовый. Занятие 05.
C++ Базовый. Занятие 05.
 
принципы ооп и программирование классов в C#
принципы ооп и программирование классов в C#принципы ооп и программирование классов в C#
принципы ооп и программирование классов в C#
 
Наследование и полиморфизм
Наследование и полиморфизмНаследование и полиморфизм
Наследование и полиморфизм
 
Java core-lect6-part2-reflection-api.ppt
Java core-lect6-part2-reflection-api.pptJava core-lect6-part2-reflection-api.ppt
Java core-lect6-part2-reflection-api.ppt
 
C++ осень 2013 лекция 3
C++ осень 2013 лекция 3C++ осень 2013 лекция 3
C++ осень 2013 лекция 3
 

Viewers also liked

C++ Базовый. Занятие 04.
C++ Базовый. Занятие 04.C++ Базовый. Занятие 04.
C++ Базовый. Занятие 04.Igor Shkulipa
 
C# Desktop. Занятие 10.
C# Desktop. Занятие 10.C# Desktop. Занятие 10.
C# Desktop. Занятие 10.Igor Shkulipa
 
C# Web. Занятие 13.
C# Web. Занятие 13.C# Web. Занятие 13.
C# Web. Занятие 13.Igor Shkulipa
 
Challenge Passport-sm
Challenge Passport-smChallenge Passport-sm
Challenge Passport-smLewis Pitzer
 
Amarnath_Kushwaha_SWEngg_3yrs_exp_C_C++
Amarnath_Kushwaha_SWEngg_3yrs_exp_C_C++Amarnath_Kushwaha_SWEngg_3yrs_exp_C_C++
Amarnath_Kushwaha_SWEngg_3yrs_exp_C_C++Amar Kushwaha
 
Enhancing Energy Efficiency in Cloud Management through Code Annotations and ...
Enhancing Energy Efficiency in Cloud Management through Code Annotations and ...Enhancing Energy Efficiency in Cloud Management through Code Annotations and ...
Enhancing Energy Efficiency in Cloud Management through Code Annotations and ...Luigi Sambolino
 
10 hewan langka di indonesia
10 hewan langka di indonesia10 hewan langka di indonesia
10 hewan langka di indonesiadyahsudorowreti
 
Production diary 4
Production diary 4Production diary 4
Production diary 4Laila Jaleel
 
αφηγηματολογια
αφηγηματολογιααφηγηματολογια
αφηγηματολογιαMANOLIS MORAITIS
 
C# Web. Занятие 01.
C# Web. Занятие 01.C# Web. Занятие 01.
C# Web. Занятие 01.Igor Shkulipa
 
C# Web. Занятие 10.
C# Web. Занятие 10.C# Web. Занятие 10.
C# Web. Занятие 10.Igor Shkulipa
 
XDAQ
XDAQXDAQ
XDAQAF
 
EE'13 - The Modern Marketer Can be Agile Too
EE'13 - The Modern Marketer Can be Agile TooEE'13 - The Modern Marketer Can be Agile Too
EE'13 - The Modern Marketer Can be Agile Toobentgate
 

Viewers also liked (20)

Energías limpias
Energías limpiasEnergías limpias
Energías limpias
 
objetos
objetosobjetos
objetos
 
C++ Базовый. Занятие 04.
C++ Базовый. Занятие 04.C++ Базовый. Занятие 04.
C++ Базовый. Занятие 04.
 
C# Desktop. Занятие 10.
C# Desktop. Занятие 10.C# Desktop. Занятие 10.
C# Desktop. Занятие 10.
 
C# Web. Занятие 13.
C# Web. Занятие 13.C# Web. Занятие 13.
C# Web. Занятие 13.
 
Challenge Passport-sm
Challenge Passport-smChallenge Passport-sm
Challenge Passport-sm
 
Amarnath_Kushwaha_SWEngg_3yrs_exp_C_C++
Amarnath_Kushwaha_SWEngg_3yrs_exp_C_C++Amarnath_Kushwaha_SWEngg_3yrs_exp_C_C++
Amarnath_Kushwaha_SWEngg_3yrs_exp_C_C++
 
Catalog AdPro
Catalog AdProCatalog AdPro
Catalog AdPro
 
Enhancing Energy Efficiency in Cloud Management through Code Annotations and ...
Enhancing Energy Efficiency in Cloud Management through Code Annotations and ...Enhancing Energy Efficiency in Cloud Management through Code Annotations and ...
Enhancing Energy Efficiency in Cloud Management through Code Annotations and ...
 
Inma
InmaInma
Inma
 
10 hewan langka di indonesia
10 hewan langka di indonesia10 hewan langka di indonesia
10 hewan langka di indonesia
 
Production diary 4
Production diary 4Production diary 4
Production diary 4
 
Brochure
BrochureBrochure
Brochure
 
αφηγηματολογια
αφηγηματολογιααφηγηματολογια
αφηγηματολογια
 
C# Web. Занятие 01.
C# Web. Занятие 01.C# Web. Занятие 01.
C# Web. Занятие 01.
 
Your Five Senses
Your Five SensesYour Five Senses
Your Five Senses
 
CV
CVCV
CV
 
C# Web. Занятие 10.
C# Web. Занятие 10.C# Web. Занятие 10.
C# Web. Занятие 10.
 
XDAQ
XDAQXDAQ
XDAQ
 
EE'13 - The Modern Marketer Can be Agile Too
EE'13 - The Modern Marketer Can be Agile TooEE'13 - The Modern Marketer Can be Agile Too
EE'13 - The Modern Marketer Can be Agile Too
 

Similar to C++ Базовый. Занятие 10.

4.1 Наследование
4.1 Наследование4.1 Наследование
4.1 НаследованиеDEVTYPE
 
наследование
наследованиенаследование
наследованиеmary110190
 
C++ весна 2014 лекция 5
C++ весна 2014 лекция 5C++ весна 2014 лекция 5
C++ весна 2014 лекция 5Technopark
 
C++ осень 2012 лекция 1
C++ осень 2012 лекция 1C++ осень 2012 лекция 1
C++ осень 2012 лекция 1Technopark
 
Django Rest Framework vs Graph Ql
Django Rest Framework vs Graph QlDjango Rest Framework vs Graph Ql
Django Rest Framework vs Graph QlAttract Group
 
C++ осень 2012 лекция 2
C++ осень 2012 лекция 2C++ осень 2012 лекция 2
C++ осень 2012 лекция 2Technopark
 
C# Desktop. Занятие 06.
C# Desktop. Занятие 06.C# Desktop. Занятие 06.
C# Desktop. Занятие 06.Igor Shkulipa
 
10. java lecture generics&collections
10. java lecture generics&collections10. java lecture generics&collections
10. java lecture generics&collectionsMERA_school
 
Сергей Константинов — Что интересного готовит нам W3C
Сергей Константинов — Что интересного готовит нам W3CСергей Константинов — Что интересного готовит нам W3C
Сергей Константинов — Что интересного готовит нам W3CYandex
 
C# Desktop. Занятие 07.
C# Desktop. Занятие 07.C# Desktop. Занятие 07.
C# Desktop. Занятие 07.Igor Shkulipa
 
C++ осень 2013 лекция 4
C++ осень 2013 лекция 4C++ осень 2013 лекция 4
C++ осень 2013 лекция 4Technopark
 
Декораторы в Python и их практическое использование
Декораторы в Python и их практическое использование Декораторы в Python и их практическое использование
Декораторы в Python и их практическое использование Sergey Schetinin
 
JavaScript Базовый. Занятие 04.
JavaScript Базовый. Занятие 04.JavaScript Базовый. Занятие 04.
JavaScript Базовый. Занятие 04.Igor Shkulipa
 
Master class bars group ext js4
Master class bars group   ext js4Master class bars group   ext js4
Master class bars group ext js4Radik Fattakhov
 

Similar to C++ Базовый. Занятие 10. (20)

4.1 Наследование
4.1 Наследование4.1 Наследование
4.1 Наследование
 
Doctrine 2
Doctrine 2Doctrine 2
Doctrine 2
 
наследование
наследованиенаследование
наследование
 
C++ весна 2014 лекция 5
C++ весна 2014 лекция 5C++ весна 2014 лекция 5
C++ весна 2014 лекция 5
 
Kotlin
KotlinKotlin
Kotlin
 
Step 3.2
Step 3.2Step 3.2
Step 3.2
 
C++ осень 2012 лекция 1
C++ осень 2012 лекция 1C++ осень 2012 лекция 1
C++ осень 2012 лекция 1
 
Django Rest Framework vs Graph Ql
Django Rest Framework vs Graph QlDjango Rest Framework vs Graph Ql
Django Rest Framework vs Graph Ql
 
Drf vs Graphql
Drf vs GraphqlDrf vs Graphql
Drf vs Graphql
 
C++ осень 2012 лекция 2
C++ осень 2012 лекция 2C++ осень 2012 лекция 2
C++ осень 2012 лекция 2
 
C# Desktop. Занятие 06.
C# Desktop. Занятие 06.C# Desktop. Занятие 06.
C# Desktop. Занятие 06.
 
Bytecode
BytecodeBytecode
Bytecode
 
Lecture 4
Lecture 4Lecture 4
Lecture 4
 
10. java lecture generics&collections
10. java lecture generics&collections10. java lecture generics&collections
10. java lecture generics&collections
 
Сергей Константинов — Что интересного готовит нам W3C
Сергей Константинов — Что интересного готовит нам W3CСергей Константинов — Что интересного готовит нам W3C
Сергей Константинов — Что интересного готовит нам W3C
 
C# Desktop. Занятие 07.
C# Desktop. Занятие 07.C# Desktop. Занятие 07.
C# Desktop. Занятие 07.
 
C++ осень 2013 лекция 4
C++ осень 2013 лекция 4C++ осень 2013 лекция 4
C++ осень 2013 лекция 4
 
Декораторы в Python и их практическое использование
Декораторы в Python и их практическое использование Декораторы в Python и их практическое использование
Декораторы в Python и их практическое использование
 
JavaScript Базовый. Занятие 04.
JavaScript Базовый. Занятие 04.JavaScript Базовый. Занятие 04.
JavaScript Базовый. Занятие 04.
 
Master class bars group ext js4
Master class bars group   ext js4Master class bars group   ext js4
Master class bars group ext js4
 

More from Igor Shkulipa

Общие темы. Тема 03.
Общие темы. Тема 03. Общие темы. Тема 03.
Общие темы. Тема 03. Igor Shkulipa
 
Общие темы. Тема 02.
Общие темы. Тема 02.Общие темы. Тема 02.
Общие темы. Тема 02.Igor Shkulipa
 
Общие темы. Тема 01.
Общие темы. Тема 01.Общие темы. Тема 01.
Общие темы. Тема 01.Igor Shkulipa
 
JavaScript Базовый. Занятие 06.
JavaScript Базовый. Занятие 06.JavaScript Базовый. Занятие 06.
JavaScript Базовый. Занятие 06.Igor Shkulipa
 
JavaScript Базовый. Занятие 11.
JavaScript Базовый. Занятие 11.JavaScript Базовый. Занятие 11.
JavaScript Базовый. Занятие 11.Igor Shkulipa
 
JavaScript Базовый. Занятие 09.
JavaScript Базовый. Занятие 09.JavaScript Базовый. Занятие 09.
JavaScript Базовый. Занятие 09.Igor Shkulipa
 
JavaScript Базовый. Занятие 10.
JavaScript Базовый. Занятие 10.JavaScript Базовый. Занятие 10.
JavaScript Базовый. Занятие 10.Igor Shkulipa
 
JavaScript Базовый. Занятие 05.
JavaScript Базовый. Занятие 05.JavaScript Базовый. Занятие 05.
JavaScript Базовый. Занятие 05.Igor Shkulipa
 
JavaScript Базовый. Занятие 08.
JavaScript Базовый. Занятие 08.JavaScript Базовый. Занятие 08.
JavaScript Базовый. Занятие 08.Igor Shkulipa
 
JavaScript Базовый. Занятие 07.
JavaScript Базовый. Занятие 07.JavaScript Базовый. Занятие 07.
JavaScript Базовый. Занятие 07.Igor Shkulipa
 
JavaScript Базовый. Занятие 01.
JavaScript Базовый. Занятие 01.JavaScript Базовый. Занятие 01.
JavaScript Базовый. Занятие 01.Igor Shkulipa
 
JavaScript Базовый. Занятие 03.
JavaScript Базовый. Занятие 03.JavaScript Базовый. Занятие 03.
JavaScript Базовый. Занятие 03.Igor Shkulipa
 
JavaScript Базовый. Занятие 02.
JavaScript Базовый. Занятие 02.JavaScript Базовый. Занятие 02.
JavaScript Базовый. Занятие 02.Igor Shkulipa
 
C# Web. Занятие 09.
C# Web. Занятие 09.C# Web. Занятие 09.
C# Web. Занятие 09.Igor Shkulipa
 
C# Web. Занятие 08.
C# Web. Занятие 08.C# Web. Занятие 08.
C# Web. Занятие 08.Igor Shkulipa
 
C# Web. Занятие 07.
C# Web. Занятие 07.C# Web. Занятие 07.
C# Web. Занятие 07.Igor Shkulipa
 
C# Web. Занятие 04.
C# Web. Занятие 04.C# Web. Занятие 04.
C# Web. Занятие 04.Igor Shkulipa
 
C# Web. Занятие 12.
C# Web. Занятие 12.C# Web. Занятие 12.
C# Web. Занятие 12.Igor Shkulipa
 
C# Web. Занятие 16.
C# Web. Занятие 16.C# Web. Занятие 16.
C# Web. Занятие 16.Igor Shkulipa
 
C# Web. Занятие 14.
C# Web. Занятие 14.C# Web. Занятие 14.
C# Web. Занятие 14.Igor Shkulipa
 

More from Igor Shkulipa (20)

Общие темы. Тема 03.
Общие темы. Тема 03. Общие темы. Тема 03.
Общие темы. Тема 03.
 
Общие темы. Тема 02.
Общие темы. Тема 02.Общие темы. Тема 02.
Общие темы. Тема 02.
 
Общие темы. Тема 01.
Общие темы. Тема 01.Общие темы. Тема 01.
Общие темы. Тема 01.
 
JavaScript Базовый. Занятие 06.
JavaScript Базовый. Занятие 06.JavaScript Базовый. Занятие 06.
JavaScript Базовый. Занятие 06.
 
JavaScript Базовый. Занятие 11.
JavaScript Базовый. Занятие 11.JavaScript Базовый. Занятие 11.
JavaScript Базовый. Занятие 11.
 
JavaScript Базовый. Занятие 09.
JavaScript Базовый. Занятие 09.JavaScript Базовый. Занятие 09.
JavaScript Базовый. Занятие 09.
 
JavaScript Базовый. Занятие 10.
JavaScript Базовый. Занятие 10.JavaScript Базовый. Занятие 10.
JavaScript Базовый. Занятие 10.
 
JavaScript Базовый. Занятие 05.
JavaScript Базовый. Занятие 05.JavaScript Базовый. Занятие 05.
JavaScript Базовый. Занятие 05.
 
JavaScript Базовый. Занятие 08.
JavaScript Базовый. Занятие 08.JavaScript Базовый. Занятие 08.
JavaScript Базовый. Занятие 08.
 
JavaScript Базовый. Занятие 07.
JavaScript Базовый. Занятие 07.JavaScript Базовый. Занятие 07.
JavaScript Базовый. Занятие 07.
 
JavaScript Базовый. Занятие 01.
JavaScript Базовый. Занятие 01.JavaScript Базовый. Занятие 01.
JavaScript Базовый. Занятие 01.
 
JavaScript Базовый. Занятие 03.
JavaScript Базовый. Занятие 03.JavaScript Базовый. Занятие 03.
JavaScript Базовый. Занятие 03.
 
JavaScript Базовый. Занятие 02.
JavaScript Базовый. Занятие 02.JavaScript Базовый. Занятие 02.
JavaScript Базовый. Занятие 02.
 
C# Web. Занятие 09.
C# Web. Занятие 09.C# Web. Занятие 09.
C# Web. Занятие 09.
 
C# Web. Занятие 08.
C# Web. Занятие 08.C# Web. Занятие 08.
C# Web. Занятие 08.
 
C# Web. Занятие 07.
C# Web. Занятие 07.C# Web. Занятие 07.
C# Web. Занятие 07.
 
C# Web. Занятие 04.
C# Web. Занятие 04.C# Web. Занятие 04.
C# Web. Занятие 04.
 
C# Web. Занятие 12.
C# Web. Занятие 12.C# Web. Занятие 12.
C# Web. Занятие 12.
 
C# Web. Занятие 16.
C# Web. Занятие 16.C# Web. Занятие 16.
C# Web. Занятие 16.
 
C# Web. Занятие 14.
C# Web. Занятие 14.C# Web. Занятие 14.
C# Web. Занятие 14.
 

C++ Базовый. Занятие 10.

  • 1. Модуль 3: Основные понятия объектно-ориентированного программирования. Темы лекции: Композиция и наследование. Практическое задание: Наследование классов. Тренер: Игорь Шкулипа, к.т.н. C++ Базовый. Занятие 10
  • 2. http://www.slideshare.net/IgorShkulipa 2 Композиция классов Композиция – механизм для создания нового класса путем объединения нескольких объектов существующих классов в единое целое. При агрегировании между классами действует «отношение принадлежности» ⚫ У машины есть кузов, колеса и двигатель ⚫ У человека есть голова, руки, ноги и тело ⚫ У треугольника есть вершины Вложенные объекты обычно объявляются закрытыми (private) внутри класса-агрегата
  • 3. http://www.slideshare.net/IgorShkulipa 3 Пример. Треугольник class Point { public: Point(double x, double y); double GetX(); double GetY(); private: double _x, _y; }; class Triangle { public: Triangle(Point p1, Point p2, Point p3); Point GetPoint(int index); double GetArea(); private: Point _p1, _p2, _p3; };
  • 4. http://www.slideshare.net/IgorShkulipa 4 Наследование Наследование – это механизм ООП, позволяющий описать новый класс на основе уже существующего. При наследовании свойства и функциональность родительского класса наследуются новым классом. Класс-наследник имеет доступ к публичным (public) и защищенным (protected) методам и полям класса родительского класса. Класс-наследник может добавлять свои данные и методы, а также переопределять методы базового класса
  • 5. http://www.slideshare.net/IgorShkulipa 5 Основные термины Родительский или базовый класс (класс-родитель) – класс, выступающий в качестве основы при наследовании. Класс-потомок (дочерний класс, класс-наследник) – класс, образованный в результате наследования от родительского класса. Иерархия наследования – отношения между родительским классом и его потомками. Интерфейс класса – совокупность публичных методов класса, доступная для использования вне класса. В интерфейсной части данные обычно не размещают. Реализация класса – совокупность приватных методов и данных класса
  • 6. http://www.slideshare.net/IgorShkulipa 6 Виды наследования По типу наследования: ◦ Открытое (public) наследование ◦ Закрытое (private) наследование ◦ Защищенное (protected) наследование По количеству базовых классов: ◦ Одиночное наследование (один базовый класс) ◦ Множественное наследование (два и более базовых классов)
  • 7. http://www.slideshare.net/IgorShkulipa 7 Открытое наследование class Point { private: double _x, _y; ... } class Figure { protected: Point _center; public: Point GetCenter(); } class Circle: public Figure { private: double _radius; public: double GetArea(); } class Triangle: public Figure { private: Point _a, _b, _c; public: double GetArea(); } Figure Circle Triangle
  • 8. http://www.slideshare.net/IgorShkulipa 8 Закрытое наследование При закрытом наследовании открытые и защищенные поля и методы родительского класса становятся закрытыми полями и методами производного. class List { public: void AddElement(double value); void RemoveElement(double value); protected: ListNode* _list; }; class Stack: private List { public: void Push(double value); double Pop(); };
  • 9. http://www.slideshare.net/IgorShkulipa 9 Защищенное наследование При закрытом наследовании открытые и защищенные поля и методы родительского класса становятся защищенными полями и методами производного. То есть эти поля доступны для дальнейшего наследования class List { public: void AddElement(double value); void RemoveElement(double value); protected: ListNode* _list; }; class Stack: protected List { public: void Push(double value); double Pop(); };
  • 10. http://www.slideshare.net/IgorShkulipa 10 Множественное наследование Язык C++ допускает наследование класса от более, чем одного базового класса. Такое наследование называют множественным. При этом порожденный класс может обладать свойствами сразу нескольких родительских классов. Например, класс может реализовывать сразу несколько интерфейсов или использовать несколько реализаций. (!) На практике множественное наследование лучше не использовать.
  • 11. http://www.slideshare.net/IgorShkulipa 11 Вызов конструкторов при наследовании В C++ при конструировании экземпляра класса-наследника всегда происходит предварительный вызов конструктора базового класса. В C++ вызов конструктора базового класса происходит до инициализации полей класса наследника. Конструктор класса-наследника может явно передать конструктору базового класса необходимы параметры при помощи списка инициализации. Если вызов конструктора родительского класса не указан явно в списке инициализации, то компилятор пытается вызвать конструктор по умолчанию класса-родителя.
  • 12. http://www.slideshare.net/IgorShkulipa 12 Вызов деструкторов при наследовании В C++ деструкторы вызываются обратно порядку вызова конструкторов. Сначала вызывается деструктор класса-наследника, затем деструктор базового класса и т.д. вверх по иерархии классов.
  • 13. http://www.slideshare.net/IgorShkulipa 13 Перегрузка методов В C++ метод производного класса замещает собой все методы родительского класса с тем же именем Количество и типы аргументов значения не имеют. Для вызова метода родительского класса из метода класса наследника используется обращение к методу базового класса с помощью операции «::» class Base{ public: void Print() { cout << "Base::Printn“; } void Print(int param) { cout << "Base::Print " << param << "n“; } }; class Derived : public Base { public: void Print(int param) { Base::Print(param); cout << "Derived::Print " << param << "n"; } };
  • 14. http://www.slideshare.net/IgorShkulipa 14 Лабораторная работа №10. Наследование Создать класс «Список». На основе этого класса создать классы- наследники - «Стек» и «Очередь». Создать приложение для демонстрации работы классов.