Разделы презентаций


Программирование

Содержание

Перегрузка операторовПерегрузка операторов позволяет определять поведение встроенных операторов для объектов пользовательских классов.Какие операторы есть в С++?

Слайды и текст этой презентации

Слайд 1Программирование
Лекция 6. Перегрузка операторов. Перегрузка операторов внутри классов . Глобальные

переменные. Статические переменные и функции. Ключевое слово friend

ПрограммированиеЛекция 6. Перегрузка операторов. Перегрузка операторов внутри классов . Глобальные переменные. Статические переменные и функции. Ключевое слово

Слайд 2Перегрузка операторов
Перегрузка операторов позволяет определять поведение встроенных операторов для объектов

пользовательских классов.
Какие операторы есть в С++?

Перегрузка операторовПерегрузка операторов позволяет определять поведение встроенных операторов для объектов пользовательских классов.Какие операторы есть в С++?

Слайд 3Основные операторы
Принимают 1 аргумент
int a = -10;
int b = ++a;
//

a = -9; b = -9;
b = a++;
// a =

-8; b = -9;

a+=10; // a=a+10;

Операторы для целых чисел, к-рые работают с ними, как с битыми строками.

~010101 = 101010

Побитовые сдвиги:
010101 >> 2 = 000101;
010101 << 2 = 010100

Основные операторыПринимают 1 аргументint a = -10;int b = ++a;// a = -9; b = -9;b =

Слайд 4Поразрядные логические операции C++
И, обозначение: &
исключающее ИЛИ, обозначение:  ^
исключающее ИЛИ, обозначение:  |
&
^
|
 0, если хотя бы

один из битов 0. Если оба бита равны 1, то

результат 1.

0, если оба бита будут равны, во всех остальных случаях результат равен 1.

0, если оба бита будут равны 0, во всех остальных случаях результат равен 1.

Поразрядные логические операции C++И, обозначение: &исключающее ИЛИ, обозначение:  ^исключающее ИЛИ, обозначение:  |&^| 0, если хотя бы один из битов 0. Если оба бита

Слайд 5Другие операторы
(разыменование указателя и взятие адреса)
p.x; A::f, “,” – оператор

последовательного выполнения b = (a+=d), (a+d); // b = a+d
A[i],

a(), a(1,2,”Hello”)
Другие операторы(разыменование указателя и взятие адреса)p.x; A::f, “,” – оператор последовательного выполнения b = (a+=d), (a+d); //

Слайд 6Перегрузка операторов
Унарный оператор
Умн-е вектора на число
Умн-е числа на вектор
Исп-ем реализацию

вектора на число
Если оператор перегружен и внутри, и снаружи, то

произойдёт ошибка!
Перегрузка операторовУнарный операторУмн-е вектора на числоУмн-е числа на векторИсп-ем реализацию вектора на числоЕсли оператор перегружен и внутри,

Слайд 7Перегрузка операторов внутри классов
Для перегрузки операторов мы использовали внешние функции,

но можно перегружать операторы и при помощи определения методов.
Нет аргументов
1

аргумент

Оператор умн-я числа на вектор внутри класса определить не получится

Для () может быть произвольное число аргументов, для [] – 1 аргумент

Перегрузка операторов внутри классовДля перегрузки операторов мы использовали внешние функции, но можно перегружать операторы и при помощи

Слайд 8Перегрузка инкремента и декремента
Унарный оператор ++a
«заглушка» (чтобы различать постфикс и

префикс)
a = 10;
b = a++;
// b = 10; a=11
Сохраняем тек.

зн-е

Вызываем префикс

Вернем временное зн-е

Посфикс «сложнее» - вызов префикса и создание копии

Перегрузка инкремента и декрементаУнарный оператор ++a«заглушка» (чтобы различать постфикс и префикс)a = 10;b = a++;// b =

Слайд 9Переопределение операторов ввода-вывода
Поток ввода
Возвращаем ссылку на поток ввода
Поток вывода
Эти операторы

всегда переопределяют как внешние функции – т.к. 1-ый аргумент –

поток ввода и вывода
Переопределение операторов ввода-выводаПоток вводаВозвращаем ссылку на поток вводаПоток выводаЭти операторы всегда переопределяют как внешние функции – т.к.

Слайд 10Операторы с особым порядком вычисления («и», «или», «,»)
False && ()

= False
True || () = True
Сначала выполняется 1-ый операнд,

но возвращается второй

При перегрузке операторов данный порядок вычислений не гарантируется – все операнды будут вычислены

Вычисление 2-го операнда не будет происходить

Можно проверить с помощью ф-ций

Операторы с особым порядком вычисления («и», «или», «,»)False && () = FalseTrue || () = True Сначала

Слайд 11Переопределение арифметических и битовых операторов
Внешняя функция
Можно было определить как метод
Конструктор

приведения от строки в стиле Си
Эта строчка не скомпилируется, если

определить как метод
Переопределение арифметических и битовых операторовВнешняя функцияМожно было определить как методКонструктор приведения от строки в стиле СиЭта строчка

Слайд 12“Правильное” переопределение операторов сравнения
Определяем только 2 оператора == и

“Правильное” переопределение операторов сравненияОпределяем только 2 оператора == и

Слайд 13О чём стоит помнить
Оператор + ничего не возвращает?
Не нужно определять

+ как *, а / как %.
Чтобы не запутаться
Допустим, ^

- это векторное умн-е.
Но здесь не ясен порядок

Так нельзя, т.к. оба операнда – встроенные типы

О чём стоит помнитьОператор + ничего не возвращает?Не нужно определять + как *, а / как %.Чтобы

Слайд 14Глобальные переменные
Н-р, многопоточные приложения
Сложно контролировать зн-е глоб. переменной
Если несколько глоб.

переменных
// разумно всегда инициализировать (.cpp)
// лучше в заголовочном файле .hpp

Глобальные переменныеН-р, многопоточные приложенияСложно контролировать зн-е глоб. переменнойЕсли несколько глоб. переменных// разумно всегда инициализировать (.cpp)// лучше в

Слайд 15Статические глобальные переменные

Статические глобальные переменные

Слайд 16Статические локальные переменные
next(10) -> 10
next(20) -> 11
Инициализация только 1 раз
Пример

на слайде

Статические локальные переменныеnext(10) -> 10next(20) -> 11Инициализация только 1 разПример на слайде

Слайд 17Статические функции
(внутри модуля)
Можно иметь ф-ции с одинаковыми названиями
Без слов static

- ошибка

Статические функции(внутри модуля)Можно иметь ф-ции с одинаковыми названиямиБез слов static - ошибка

Слайд 18Статические поля класса
Так мы можем посчитать кол-во экземпляров типа User
Инкремент

в конструкторе, декремент в деструкторе
Определять нужно снаружи класса

Статические поля классаТак мы можем посчитать кол-во экземпляров типа UserИнкремент в конструкторе, декремент в деструктореОпределять нужно снаружи

Слайд 19Статические методы
Есть доступ к закрытым полям класса

Статические методы Есть доступ к закрытым полям класса

Слайд 20Ключевое слово inline
Вместо вызова ф-ции будет замена на умножение
Не

получится разделить на определение в заголовочном файле и реализацию в

.cpp

Если сложная ф-ция

Ключевое слово inline Вместо вызова ф-ции будет замена на умножениеНе получится разделить на определение в заголовочном файле

Слайд 21Правило одного определения
(т.е.одного файла)
Ошибка на этапе компиляции
Ошибка на этапе

линковки
Не будет ошибки, но будет некорректная программа

Правило одного определения (т.е.одного файла)Ошибка на этапе компиляцииОшибка на этапе линковкиНе будет ошибки, но будет некорректная программа

Слайд 23Вопрос 1

Вопрос 1

Слайд 24Ответ: 3

Ответ: 3

Слайд 25Вопрос 2

Вопрос 2

Слайд 26Вопрос 3

Вопрос 3

Слайд 27Ответ: 1

Ответ: 1

Слайд 28Вопрос 4

Вопрос 4

Слайд 29Ответ: 3

Ответ: 3

Слайд 30Дружественные классы
Данные классы не связаны наследованием
Обращение к private-полям класса

String

Дружественные классы Данные классы не связаны наследованиемОбращение к private-полям класса String

Слайд 31Дружественные функции
Оператор вывода
Функцию можно не только объявить, но и

определить
Получаем доступ к private-полям класса String

Дружественные функции Оператор выводаФункцию можно не только объявить, но и определитьПолучаем доступ к private-полям класса String

Слайд 32Дружественные методы
Для одного класса можно определить дружественным метод другого

класса
Определение метода будет после

Дружественные методы Для одного класса можно определить дружественным метод другого классаОпределение метода будет после

Обратная связь

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

Email: Нажмите что бы посмотреть 

Что такое TheSlide.ru?

Это сайт презентации, докладов, проектов в PowerPoint. Здесь удобно  хранить и делиться своими презентациями с другими пользователями.


Для правообладателей

Яндекс.Метрика