🗊Презентация Перегрузка операций

Нажмите для полного просмотра!
Перегрузка операций, слайд №1Перегрузка операций, слайд №2Перегрузка операций, слайд №3Перегрузка операций, слайд №4Перегрузка операций, слайд №5Перегрузка операций, слайд №6Перегрузка операций, слайд №7Перегрузка операций, слайд №8Перегрузка операций, слайд №9Перегрузка операций, слайд №10Перегрузка операций, слайд №11Перегрузка операций, слайд №12Перегрузка операций, слайд №13Перегрузка операций, слайд №14Перегрузка операций, слайд №15Перегрузка операций, слайд №16Перегрузка операций, слайд №17Перегрузка операций, слайд №18Перегрузка операций, слайд №19Перегрузка операций, слайд №20Перегрузка операций, слайд №21Перегрузка операций, слайд №22

Содержание

Вы можете ознакомиться и скачать презентацию на тему Перегрузка операций. Доклад-сообщение содержит 22 слайдов. Презентации для любого класса можно скачать бесплатно. Если материал и наш сайт презентаций Mypresentation Вам понравились – поделитесь им с друзьями с помощью социальных кнопок и добавьте в закладки в своем браузере.

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


Слайд 1





ПЕРЕГРУЗКА ОПЕРАЦИЙ
Описание слайда:
ПЕРЕГРУЗКА ОПЕРАЦИЙ

Слайд 2





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

Слайд 3





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

Слайд 4





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

Слайд 5





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

Слайд 6





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

Слайд 7





// mytime.h — класс Time до перегрузки операции 
// mytime.h — класс Time до перегрузки операции 
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 () ;
} ;
Описание слайда:
// mytime.h — класс Time до перегрузки операции // mytime.h — класс Time до перегрузки операции 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 () ; } ;

Слайд 8





// mytime.срр -- реализация методов Time 
// mytime.срр -- реализация методов Time 
#include <iostream> 
#include "mytime.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;
}
Описание слайда:
// mytime.срр -- реализация методов Time // mytime.срр -- реализация методов Time #include <iostream> #include "mytime.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; }

Слайд 9





void Time::Reset (int h, int m) {
void Time::Reset (int h, int m) {
hours = 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";
}
Описание слайда:
void Time::Reset (int h, int m) { void Time::Reset (int h, int m) { hours = 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.срр -- использование первой черновой версии класса Time 
// usetime.срр -- использование первой черновой версии класса Time 
// компилировать usetime.срр и mytime.cpp вместе 
#include <iostream> 
#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;
}
Описание слайда:
// usetime.срр -- использование первой черновой версии класса Time // usetime.срр -- использование первой черновой версии класса Time // компилировать usetime.срр и mytime.cpp вместе #include <iostream> #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 = 0 hours, 0 minutes 
coding time = 2 hours, 40 minutes 
fixing time = 5 hours, 55 minutes 
coding.Sum(fixing) = 8 hours, 35 minutes
Описание слайда:
Ниже показан вывод программы из листингов Ниже показан вывод программы из листингов planning time = 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 после перегрузки операции
// nmytime.h — класс Time после перегрузки операции
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 operator+(const Time & t);
void Show();
};
Описание слайда:
// nmytime.h — класс Time после перегрузки операции // nmytime.h — класс Time после перегрузки операции 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 operator+(const Time & t); void Show(); };

Слайд 13





// nmytime.срр — реализация методов Time 
// nmytime.срр — реализация методов Time 
#include <iostream> 
#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;
}
Описание слайда:
// nmytime.срр — реализация методов Time // nmytime.срр — реализация методов Time #include <iostream> #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) {
void Time::Reset (int h, int m) {
hours = 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";
}
Описание слайда:
void Time::Reset (int h, int m) { void Time::Reset (int h, int m) { hours = 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+ () можно вызвать с использованием того же синтаксиса, что и в случае с Sum ():
Метод operator+ () можно вызвать с использованием того же синтаксиса, что и в случае с Sum ():
total=coding.operator+(fixing);//нотация с функцией
Но назначение методу имени operator+ () позволяет также применить нотацию операции:
total = coding + fixing;// нотация с операцией
Оба варианта вызывают метод operator+ (). Обратите внимание, что в нотации с операцией объект слева от операции (в рассматриваемом случае coding) является вызывающим объектом, а объект справа (в данном случае fixing) передается в качестве аргумента.
Описание слайда:
Метод operator+ () можно вызвать с использованием того же синтаксиса, что и в случае с Sum (): Метод operator+ () можно вызвать с использованием того же синтаксиса, что и в случае с Sum (): total=coding.operator+(fixing);//нотация с функцией Но назначение методу имени operator+ () позволяет также применить нотацию операции: total = coding + fixing;// нотация с операцией Оба варианта вызывают метод operator+ (). Обратите внимание, что в нотации с операцией объект слева от операции (в рассматриваемом случае coding) является вызывающим объектом, а объект справа (в данном случае fixing) передается в качестве аргумента.

Слайд 16





// nusetime.срр — использование второй черновой версии класса Time 
// nusetime.срр — использование второй черновой версии класса Time 
// компилировать nusetime.срр и nmytime.cpp вместе 
#include <iostream>
#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;
// Нотация с операцией
Описание слайда:
// nusetime.срр — использование второй черновой версии класса Time // nusetime.срр — использование второй черновой версии класса Time // компилировать nusetime.срр и nmytime.cpp вместе #include <iostream> #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 << "coding + fixing = "; total.Show(); cout « endl; 
cout << "coding + fixing = "; total.Show(); 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;}
Описание слайда:
cout << "coding + fixing = "; total.Show(); cout « endl; cout << "coding + fixing = "; total.Show(); 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, с; 
int а, b, с; 
Time А, В, С;
с = а + b; // используется сложение значений int
С = А + В; // используется сложение, определенное для объектов Time
Описание слайда:
int а, b, с; int а, b, с; Time А, В, С; с = а + b; // используется сложение значений int С = А + В; // используется сложение, определенное для объектов Time

Слайд 19





ОГРАНИЧЕНИЯ ПЕРЕГРУЗКИ
ОГРАНИЧЕНИЯ ПЕРЕГРУЗКИ
Перегруженные операции должны иметь как минимум один операнд типа, определяемого пользователем. Это предотвращает перегрузку операций, работающих со стандартными типами. То есть переопределить операцию "минус" (-) так, чтобы она вычисляла сумму двух вещественных чисел вместо разности, не получится. Это ограничение сохраняет здравый смысл, заложенный в программу, хотя и несколько препятствует полету творчества.
Вы не можете использовать операцию в такой манере, которая нарушает правила синтаксиса исходной операции.
Описание слайда:
ОГРАНИЧЕНИЯ ПЕРЕГРУЗКИ ОГРАНИЧЕНИЯ ПЕРЕГРУЗКИ Перегруженные операции должны иметь как минимум один операнд типа, определяемого пользователем. Это предотвращает перегрузку операций, работающих со стандартными типами. То есть переопределить операцию "минус" (-) так, чтобы она вычисляла сумму двух вещественных чисел вместо разности, не получится. Это ограничение сохраняет здравый смысл, заложенный в программу, хотя и несколько препятствует полету творчества. Вы не можете использовать операцию в такой манере, которая нарушает правила синтаксиса исходной операции.

Слайд 20





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

Слайд 21





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

Слайд 22


Перегрузка операций, слайд №22
Описание слайда:



Похожие презентации
Mypresentation.ru
Загрузить презентацию