- •Содержан
- •Класс А
- •Метод turn_on()
- •Приватные данные
- •Множественное наследование
- •Проблематика множественного наследования
- •Проблема ромбовидного наследования
- •Проблема ромбовидного наследования
- •Проблема ромбовидного наследования: Конструкторы и деструкторы
- •Интерфейс
- •Неявное приведение
- •Неявное приведение типов
- •Protecte
- •Protecte
- •Protected
- •Protecte
- •Protecte
- •Перегрузка 03
- •Пример перегрузки
- •Правила
- •Переопределение методов
- •Приме
- •Привязка вызова функции к объектам класса
- •Виртуальные
- •Виртуальные
- •Виртуальные
- •Таблица виртуальных методов
- •Виртуальное наследование
- •Абстрактный класс
- •Виртуальные методы в конструкторе и деструкторе
- •Конструкторы &
- •Виртуальные методы в конструкторе и деструкторе
- •Спасибо за внимание
Неявное приведение |
02 |
типов |
|
Определение
Приведение типов — это явление, при котором тип |
|
|
|
данных преобразуется из одного типа в другой, чтобы |
|
|
|
упростить вычисление исходного кода. |
|
|
|
Неявное приведение типов – это автоматическое |
|
|
|
приведение типа, выполняемое компилятором, когда |
|
|
|
требуется один тип данных, но предоставляется другой тип. |
Пример кода |
||
|
|
||
|
|
|
|
|
double d{ 3 }; // значение int 3 неявно преобразуется в тип double |
||
|
d = 6; |
// значение int 6 неявно преобразуется в тип double |
|
|
double division{ 4.0 / 3 }; // значение int 3 неявно преобразуется в |
||
|
тип double |
|
|
|
if (5) // значение int 5 неявно преобразуется в тип bool |
void doSomething(long l)
{
}
doSomething(3); // значение int 3 неявно преобразуется в тип long
12
Неявное приведение типов
Если компилятор не может найти приемлемое преобразование, то компиляция завершится ошибкой. Преобразование типов может завершиться неудачей по любому количеству причин. Например, компилятор может не знать, как преобразовать значение между исходным и запрашиваемым типами.
//Инициализация с фигурными скобками запрещает преобразования,
//которые приводят к потере данных
int x { 3.5 };
|
Стандартные преобразования |
Числовые продвижения |
Различные преобразования указателей и ссылок |
Числовые преобразования |
Арифметические преобразования |
13
Protecte
d
Protected открывает доступ тем классам, которые унаследованы от данного. Так же доступ имеют те классы и методы, которые обозначены, как “friend” или дружественными.
Модификаторы доступа
Public
Private Protected
Поле класса, которое отмечено, как protected недоступен из внешнего недружественного метода из экземпляра класса. При этом к нему есть доступ из внутреннего метода, как к члену класса
Если в классе объявлен дружественный метод или дружественный класс, то элемент класса будет из них 14 доступен.
Protecte
d
Элемент класса доступен из унаследованного класса
Элемент класса недоступен из экземпляров унаследованного класса.
15
Protected
При protected наследовании данные, которые были в родительском классе public и protected становятся protected.
16
Protecte
d
Модификатор доступа protected ограничивает доступ из экземпляров унаследованных классов и не ограничивает доступ из методов унаследованных классов. Если два класса A, B образуют иерархию наследования, и класс A объявлен базовым с модификатором protected, то действуют следующие правила:
Все protected и public-элементы класса A доступны из методов класса B
Все protected— и public-элементы класса A доступны из методов класса, унаследованного от класса B (класса C)
Нет доступа к любому элементу класса A из экземпляров производных классов
17
Protecte
d
18
Перегрузка 03
Перегрузка операторов позволяет определить действия, которые будет выполнять оператор. Перегрузка подразумевает создание функции, название которой содержит слово operator и символ перегружаемого оператора. Функция оператора может быть определена как член класса, либо вне класса.
Перегрузить можно только те операторы, которые уже определены в C++. Создать новые операторы нельзя.
19
Пример перегрузки
20
Правила
перегрузки
1Если есть точное совпадение, то используется оно
2 Если нет функции, которая могла бы подойти с учетом преобразований,
3 |
выдается ошибка |
|
Есть функции, подходящие с учётом преобразований: |
||
|
|
chair, signed char, short расширяется до типа int |
|
Расширение типов |
unsigned char, unsigned short расширяется до типа int/unsigned |
|
int, unsigned int, long, unsigned long; |
|
|
|
float расширяется до типа double |
|
|
Восходящие приведения целочисленных типов |
|
Стандартные преобразования Преобразования типов с плавающей запятой |
|
|
|
Преобразования ссылок |
Выполняют преобразование между
Пользовательские преобразования пользовательскими типами или между пользовательскими и встроенными типами
21