Что такое findslide.org?

FindSlide.org - это сайт презентаций, докладов, шаблонов в формате PowerPoint.


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

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

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

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

Презентация на тему ПЕРЕГРУЗКА ОПЕРАЦИЙ

Содержание

Перегрузка операций — это пример полиморфизма С++. С++ позволяет определять несколько функций с одинаковыми именами и разной сигнатурой (списками аргументов). Это называлось перегрузкой функций или функциональным полиморфизмом. Цель такой перегрузки — позволить использовать одно и то
ПЕРЕГРУЗКА ОПЕРАЦИЙ Перегрузка операций — это пример полиморфизма С++. С++ позволяет определять несколько функций Перегруженные операции часто могут заставить код выглядеть более естественно. Например, общей вычислительной Для перегрузки операции используется специальная форма функции, называемая функцией операции. Функция операции Предположим, что имеется класс Salesperson, в котором определена функция-член operator+ ( ) Если вы находились в системе под конкретным именем пользователя в течение 2 // mytime.h — класс Time до перегрузки операции class Time {private:int hours; // mytime.срр -- реализация методов Time #include #include void Time::Reset (int h, int m) {hours = h;minutes = m;}Time Time:: // usetime.срр -- использование первой черновой версии класса Time // компилировать usetime.срр Ниже показан вывод программы из листингов planning time = 0 hours, 0 // nmytime.h — класс Time после перегрузки операцииclass Time {private:int hours;int minutes; // nmytime.срр — реализация методов Time #include #include void Time::Reset (int h, int m) {hours = h; minutes = m;}Time Метод operator+ () можно вызвать с использованием того же синтаксиса, что и // nusetime.срр — использование второй черновой версии класса Time // компилировать nusetime.срр cout int а, b, с; Time А, В, С;с = а + b; ОГРАНИЧЕНИЯ ПЕРЕГРУЗКИПерегруженные операции должны иметь как минимум один операнд типа, определяемого пользователем. Вы не можете определять новые символы операций. Нельзя перегружать следующие операции: Для перегрузки перечисленных ниже операций можно использовать только функции- члены:
Слайды презентации

Слайд 2 Перегрузка операций — это пример полиморфизма С++.
С++

Перегрузка операций — это пример полиморфизма С++. С++ позволяет определять несколько

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

сигнатурой (списками аргументов).
Это называлось перегрузкой функций или функциональным полиморфизмом. Цель такой перегрузки — позволить использовать одно и то же имя функции для некоторой базовой операции, несмотря на то, что она применяется к данным разных типов. Перегрузка операций расширяет концепцию перегрузки на операции, позволяя трактовать их множеством способов.


Слайд 3 Перегруженные операции часто могут заставить код выглядеть более

Перегруженные операции часто могут заставить код выглядеть более естественно. Например, общей

естественно. Например, общей вычислительной задачей является сложение двух массивов.

Обычно это выглядит подобно следующему циклу for:
for (int i = 0; i < 20; i++)
massC[i]=massA[i]+massB[i];//поэлементное сложение
Но в С++ можно определить класс, который представляет массивы и перегружает операцию + таким образом, что станет возможным приведенный ниже код:
massC = massA + massB;// сложить два объекта-массива


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

Для перегрузки операции используется специальная форма функции, называемая функцией операции. Функция

функцией операции. Функция операции имеет следующую форму, в которой

ор — это символ перегружаемой операции:
operatorop (список-аргументов)
Например, operator+ ( ) перегружает операцию +, a operator* ( ) — операцию *. Операция ор должна быть допустимой операцией С++, а не произвольным символом.

Слайд 5 Предположим, что имеется класс Salesperson, в котором определена

Предположим, что имеется класс Salesperson, в котором определена функция-член operator+ (

функция-член operator+ ( ) для перегрузки операции + так,

что она сможет добавлять зарплату одного лица к зарплате другого лица. Тогда если sam, sid и sara — объекты класса Salesperson, можно написать следующее выражение:
sam = sid + sara;
Компилятор, распознав операцию как относящуюся к классу Salesperson, заменит ее вызовом соответствующей функции операции:
sam = sid.operator+(sara) ;


Слайд 6 Если вы находились в системе под конкретным именем

Если вы находились в системе под конкретным именем пользователя в течение

пользователя в течение 2 часов 35 минут с утра

и 2 часов 40 минут после обеда, то сколько всего времени вы проработали в системе? Ниже приведен пример, в котором концепция сложения имеет смысл, несмотря на то, что единицы, которые вы складываете (смесь часов и минут) не соответствует какому-либо встроенному типу.

Слайд 7 // mytime.h — класс Time до перегрузки операции

// mytime.h — класс Time до перегрузки операции class Time {private:int


class Time
{
private:
int hours;
int minutes;
public:
Time ()

;
Time (int h, int m);
void AddMin(int m) ;
void AddHr (int h) ;
void Reset (int h , int m) ;
Time Sum (const Time & t) ;
void Show () ;
} ;

Слайд 9 void Time::Reset (int h, int m) {
hours =

void Time::Reset (int h, int m) {hours = h;minutes = m;}Time

h;
minutes = m;
}
Time Time:: Sum (const Time & t)

{
Time sum;
sum.minutes = minutes + t.minutes;
sum.hours = hours + t.hours + sum.minutes / 60;
sum.minutes %= 60;
return sum;
}
void Time::Show () {
std::cout « hours « " hours, " « minutes « " minutes";
}

Слайд 10 // usetime.срр -- использование первой черновой версии класса

// usetime.срр -- использование первой черновой версии класса Time // компилировать

Time
// компилировать usetime.срр и mytime.cpp вместе
#include


#include "mytime.h"
int main()
{
using std::cout;
using std::endl;
Time planning;
Time coding(2, 40);
Time fixing(5, 55);
Time total;
cout « "planning time = ";
planning.Show ();
cout « endl;
cout « "coding time = ";
coding.Show ();
cout « endl;
cout « "fixing time = ";
fixing.Show ();
cout « endl;
total = coding.Sum(fixing) ;
cout « "coding. Sum (fixing) = ";
total.Show();
cout « endl;
return 0;
}

Слайд 11 Ниже показан вывод программы из листингов



planning time

Ниже показан вывод программы из листингов planning time = 0 hours,

= 0 hours, 0 minutes
coding time = 2

hours, 40 minutes
fixing time = 5 hours, 55 minutes
coding.Sum(fixing) = 8 hours, 35 minutes


Слайд 12 // nmytime.h — класс Time после перегрузки операции
class

// nmytime.h — класс Time после перегрузки операцииclass Time {private:int hours;int

Time {
private:
int hours;
int minutes;
public:
Time();
Time (int h, int m)

;
void AddMin (int m) ;
void AddHr(int h);
void Reset (int h , int m) ;
Time operator+(const Time & t);
void Show();
};

Слайд 13 // nmytime.срр — реализация методов Time
#include

// nmytime.срр — реализация методов Time #include #include


#include "nmytime. h"
Time: :Time () {
hours = minutes =

0;
}
Time::Time (int h, int m ) {
hours = h; minutes = m;
}
void Time::AddMin (int m) {
minutes += m;
hours += minutes / 60;
minutes %= 60;
}
void Time::AddHr(int h) {
hours += h;
}

Слайд 14 void Time::Reset (int h, int m) {
hours =

void Time::Reset (int h, int m) {hours = h; minutes =

h; minutes = m;
}
Time Time::operator+(const Time & t) {
Time

sum;
sum.minutes = minutes + t.minutes;
sum.hours = hours + t.hours + sum.minutes / 60;
sum.minutes %= 60;
return sum;
}
void Time::Show() {
std::cout « hours « " hours, " « minutes « " minutes";
}

Слайд 15 Метод operator+ () можно вызвать с использованием того

Метод operator+ () можно вызвать с использованием того же синтаксиса, что

же синтаксиса, что и в случае с Sum ():
total=coding.operator+(fixing);//нотация

с функцией
Но назначение методу имени operator+ () позволяет также применить нотацию операции:
total = coding + fixing;// нотация с операцией
Оба варианта вызывают метод operator+ (). Обратите внимание, что в нотации с операцией объект слева от операции (в рассматриваемом случае coding) является вызывающим объектом, а объект справа (в данном случае fixing) передается в качестве аргумента.

Слайд 16 // nusetime.срр — использование второй черновой версии класса

// nusetime.срр — использование второй черновой версии класса Time // компилировать

Time
// компилировать nusetime.срр и nmytime.cpp вместе
#include
#include

“nmytime.h"
int main () {
using std::cout; using std::endl;
Time planning; Time coding(2, 40); Time fixing (5, 55); Time total;
cout « "planning time = "; planning.Show () ;
cout « endl; cout « "coding time = "; coding.Show (); cout « endl; cout « "fixing time = "; fixing.Show () ; cout « endl; total = coding + fixing;
// Нотация с операцией


Слайд 17 cout

cout

cout « endl;
Time morefixing (3, 28);
cout « "more

fixing time = "; morefixing.Show (); cout « endl;
total = morefixing.operator+(total) ; cout<<"morefixing.operator+(total)= "; total.Show(); }cout « endl; return 0;}

Слайд 18 int а, b, с;
Time А, В, С;
с

int а, b, с; Time А, В, С;с = а +

= а + b; // используется сложение значений int
С

= А + В; // используется сложение, определенное для объектов Time

Слайд 19 ОГРАНИЧЕНИЯ ПЕРЕГРУЗКИ
Перегруженные операции должны иметь как минимум один

ОГРАНИЧЕНИЯ ПЕРЕГРУЗКИПерегруженные операции должны иметь как минимум один операнд типа, определяемого

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

со стандартными типами. То есть переопределить операцию "минус" (-) так, чтобы она вычисляла сумму двух вещественных чисел вместо разности, не получится. Это ограничение сохраняет здравый смысл, заложенный в программу, хотя и несколько препятствует полету творчества.
Вы не можете использовать операцию в такой манере, которая нарушает правила синтаксиса исходной операции.

Слайд 20 Вы не можете определять новые символы операций.
Нельзя

Вы не можете определять новые символы операций. Нельзя перегружать следующие операции:

перегружать следующие операции:


Слайд 21 Для перегрузки перечисленных ниже операций можно использовать только

Для перегрузки перечисленных ниже операций можно использовать только функции- члены:

функции- члены:


  • Имя файла: peregruzka-operatsiy.pptx
  • Количество просмотров: 98
  • Количество скачиваний: 0
- Предыдущая ПОМОГИ ДЕТЯМ
Следующая - Зона тундры