Добавил:
Developer Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Магистратура Языки программирования С,C++ / Презентация №8 Наследование, перегрузка, переопределение.pptx
Скачиваний:
3
Добавлен:
17.03.2024
Размер:
4.93 Mб
Скачать

Неявное приведение

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