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


Тема 6. Объектно-ориентированное программирование. Перегрузка и шаблоны

Содержание

Программирование и основы алгоритмизацииТема 6. Объектно-ориентированное программирование. Перегрузка и шаблоны2Шевченко А. В.Перегрузка функцийПерегрузка функций - одна из форм полиморфизма, которая заключается в возможности использования в одном пространстве имен нескольких функций с

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

Слайд 1Программирование и основы алгоритмизации
Тема 6. Объектно-ориентированное программирование. Перегрузка и шаблоны
1
Тема

6. Объектно-ориентированное программирование. Перегрузка и шаблоны
Шевченко А. В.

Программирование и основы алгоритмизации		Тема 6. Объектно-ориентированное программирование. Перегрузка и шаблоны1Тема 6. Объектно-ориентированное программирование. Перегрузка и шаблоныШевченко А.

Слайд 2Программирование и основы алгоритмизации
Тема 6. Объектно-ориентированное программирование. Перегрузка и шаблоны
2
Шевченко

А. В.
Перегрузка функций
Перегрузка функций - одна из форм полиморфизма, которая

заключается в возможности использования в одном пространстве имен нескольких функций с одинаковым именем, но с разными параметрами.

Язык С

Язык С++

int abs(int x)

double fabs(double x)

int abs(int x)

double abs(double x)

Программирование и основы алгоритмизацииТема 6. Объектно-ориентированное программирование. Перегрузка и шаблоны2Шевченко А. В.Перегрузка функцийПерегрузка функций - одна из

Слайд 3Программирование и основы алгоритмизации
Тема 6. Объектно-ориентированное программирование. Перегрузка и шаблоны
3
Шевченко

А. В.
Перегрузка функций в С++
char abs(char x);
short abs(short x);
long abs(long

x);
float abs(float x);

char abs(char x)
{
return(x < 0 ? -x : x);
}

short abs(short x)
{
return(x < 0 ? -x : x);
}

long abs(long x)
{
return(x < 0 ? -x : x);
}

float abs(float x)
{
return(x < 0 ? -x : x);
}

Язык С++ разрешает определение нескольких функций с одним и тем же именем, если функции отличаются числом или типом параметров.

Программирование и основы алгоритмизацииТема 6. Объектно-ориентированное программирование. Перегрузка и шаблоны3Шевченко А. В.Перегрузка функций в С++char 	abs(char x);short

Слайд 4Программирование и основы алгоритмизации
Тема 6. Объектно-ориентированное программирование. Перегрузка и шаблоны
4
Шевченко

А. В.
Перегрузка методов в С++
class Circle
{
private:
double r;
...
public:
void

Fit(Rectangle &R);
void Fit(Triangle &T);
void Fit(Square &S);
};

void Circle::Fit(Square &S)
{
r = S.Side()/2;
}
Программирование и основы алгоритмизацииТема 6. Объектно-ориентированное программирование. Перегрузка и шаблоны4Шевченко А. В.Перегрузка методов в С++class Circle{private:

Слайд 5Программирование и основы алгоритмизации
Тема 6. Объектно-ориентированное программирование. Перегрузка и шаблоны
5
Шевченко

А. В.
Перегрузка, переопределение, сокрытие
Перегружаемые функции должны находиться в одной области

определения.
Перегружаемые функции различаются компилятором по их параметрам.
Посредством перегрузки вызываемая версия функции соответствует конкретным типам параметров.
Переопределение функции осуществляется новым описанием функции в другой области определения в иерархиях классов.
Переопределяемые функции имеют идентичные имена и типы параметров.
Сокрытие или "затенение" функций осуществляется для функций, находящихся в различных областях определения, причем функция, описанная во внутренней области, скрывает описание, данное во внешней области.
Скрываемые и скрывающие функции имеют идентичные имена.
Доступ к скрытым функциям осуществляется через оператор расширения области видимости.
Программирование и основы алгоритмизацииТема 6. Объектно-ориентированное программирование. Перегрузка и шаблоны5Шевченко А. В.Перегрузка, переопределение, сокрытиеПерегружаемые функции должны находиться

Слайд 6Программирование и основы алгоритмизации
Тема 6. Объектно-ориентированное программирование. Перегрузка и шаблоны
6
Шевченко

А. В.
Пример перегрузки, переопределения, сокрытия
class Figure
{
public:
double Area();

void Draw();
};

class Circle : public Figure
{
public:
double Area();
void Draw(int x, int y);
void Fit(Rectangle &R);
void Fit(Triangle &T);
void Fit(Square &S);
};

Circle c(100);
c.Draw(120, 50); // правильно
c.Draw(); // ошибка
c.Figure::Draw(); // правильно

Программирование и основы алгоритмизацииТема 6. Объектно-ориентированное программирование. Перегрузка и шаблоны6Шевченко А. В.Пример перегрузки, переопределения, сокрытияclass Figure{public:

Слайд 7+ =
Circle a(2);
Circle b(2);
Circle c = a+b;

Circle

c = a.operator+(b);
Программирование и основы алгоритмизации
Тема 6. Объектно-ориентированное программирование. Перегрузка

и шаблоны

7

Шевченко А. В.

Перегрузка операторов в С++

2 + 2 = 4

int a = 2;
int b = 2;
int c = a+b;

+   = Circle a(2);Circle b(2);Circle c = a+b;Circle c = a.operator+(b);Программирование и основы алгоритмизацииТема 6.

Слайд 8Программирование и основы алгоритмизации
Тема 6. Объектно-ориентированное программирование. Перегрузка и шаблоны
8
Шевченко

А. В.
Правила перегрузки операторов
Нельзя определять новые операторы
Нельзя перегружать

операторы :: , ?: , . , .* , # , ##
По крайней мере один из операндов перегруженного оператора должен быть объектом класса или ссылкой на объект класса
Нельзя изменять общий синтаксис оператора (число операндов, приоритет, задаваемые аргументы)

Перегрузка операторов

Вне области класса

В рамках определения класса

Программирование и основы алгоритмизацииТема 6. Объектно-ориентированное программирование. Перегрузка и шаблоны8Шевченко А. В.Правила перегрузки операторов Нельзя определять новые

Слайд 9class Circle
{
private:
double r;
public:
Circle(double R) { r

= R; }

Circle &operator+(Circle &C);
};

Circle &Circle::operator+(Circle &C)
{

static Circle tmp(0);
tmp.r = sqrt(r*r+C.r*C.r);
return(tmp);
}

Программирование и основы алгоритмизации

Тема 6. Объектно-ориентированное программирование. Перегрузка и шаблоны

9

Шевченко А. В.

Пример перегрузки оператора «+» в области класса

class Circle {private:  double	r;public:  Circle(double R) { r = R; }  Circle &operator+(Circle &C);};Circle

Слайд 10Circle &operator+(Circle &C1, Circle &C2)
{
static Circle C();

C.r = sqrt(C1.r*C1.r+C2.r*C2.r);
return(C);
}
Программирование и основы алгоритмизации
Тема 6. Объектно-ориентированное

программирование. Перегрузка и шаблоны

10

Шевченко А. В.

Пример перегрузки оператора «+» вне области класса

Circle &operator+(Circle &C1, Circle &C2){  static Circle C();  C.r = sqrt(C1.r*C1.r+C2.r*C2.r);  return(C);}Программирование и основы

Слайд 11class Circle
{
private:
double r;
public:
Circle(double R) { r

= R; }

Circle &operator=(Circle &C);
};

Circle &Circle::operator=(Circle &C)
{

r = C.r;
return(*this);
}

Программирование и основы алгоритмизации

Тема 6. Объектно-ориентированное программирование. Перегрузка и шаблоны

11

Шевченко А. В.

Пример перегрузки оператора присваивания

class Circle {private:  double	r;public:  Circle(double R) { r = R; }  Circle &operator=(Circle &C);};Circle

Слайд 12Circle a, b, c, d, e;
Программирование и основы алгоритмизации
Тема 6.

Объектно-ориентированное программирование. Перегрузка и шаблоны
12
Шевченко А. В.
Перегруженные операторы и цепочные

вычисления

e = a+b+c+d;

e.operator=(a.operator+(b).operator+(c).operator+(d));

e = (a+b)+(c+d);

e.operator=(a.operator+(b).operator+(c.operator+(d)));

e = a+(b+c)+d;

e.operator=(a.operator+(b.operator+(c)).operator+(d));

Circle a, b, c, d, e;Программирование и основы алгоритмизацииТема 6. Объектно-ориентированное программирование. Перегрузка и шаблоны12Шевченко А. В.Перегруженные

Слайд 13Программирование и основы алгоритмизации
Тема 6. Объектно-ориентированное программирование. Перегрузка и шаблоны
13
Шевченко

А. В.
Многократная перегрузка операторов
class Circle
{
private:
double r;
public:
Circle(double

R) { r = R; }

Circle &operator=(Circle &C);
Circle &operator=(Rectangle &R);
Circle &operator=(Triangle &T);
Circle &operator=(Square &S);
};

Circle &Circle::operator=(Square &S)
{
r = sqrt(S.Area()/M_PI);
return(*this);
}
Программирование и основы алгоритмизацииТема 6. Объектно-ориентированное программирование. Перегрузка и шаблоны13Шевченко А. В.Многократная перегрузка операторовclass Circle {private:

Слайд 14Программирование и основы алгоритмизации
Тема 6. Объектно-ориентированное программирование. Перегрузка и шаблоны
14
Шевченко

А. В.
Пример перегрузки оператора >
class Circle
{
public:
double Area()

{ return(M_PI*r*r); }
bool operator>(Circle &C);
bool operator>(Rectangle &R);
bool operator>(Triangle &T);
bool operator>(Square &S);
};

bool Circle::operator>(Circle &C)
{
return(r > C.r);
}

bool Circle::operator>(Rectangle &R)
{
return(Area() > R.Area());
}
Программирование и основы алгоритмизацииТема 6. Объектно-ориентированное программирование. Перегрузка и шаблоны14Шевченко А. В.Пример перегрузки оператора >class Circle {public:

Слайд 15Программирование и основы алгоритмизации
Тема 6. Объектно-ориентированное программирование. Перегрузка и шаблоны
15
Шевченко

А. В.
Перегрузка операторов ++ и --
class Circle
{
private:
double r;
public:

Circle(double R) { r = R; }
Circle& operator++(); // префиксная форма
Circle& operator++(int); // постфиксная форма
Circle& operator--(); // префиксная форма
Circle& operator--(int); // постфиксная форма
};

Circle &operator++()
{
r *= 2;
return(*this);
}

Circle &operator++(int)
{
static Circle tmp(0);
tmp.r = r;
r *= 2;
return(tmp);
}

Circle a(10);
Circle b = a++;
Circle c = ++a;

Программирование и основы алгоритмизацииТема 6. Объектно-ориентированное программирование. Перегрузка и шаблоны15Шевченко А. В.Перегрузка операторов ++ и --class Circle

Слайд 16Программирование и основы алгоритмизации
Тема 6. Объектно-ориентированное программирование. Перегрузка и шаблоны
16
Шевченко

А. В.
Шаблоны функций
char min(char x, char y);
short min(short x, short

y);
long min(long x, long y);
float min(float x, float y);
double min(double x, double x);

template
T min(T x, T y)
{
return(x < y ? x : y);
}

long double min(long double x, long double y); // инсталляция

Программирование и основы алгоритмизацииТема 6. Объектно-ориентированное программирование. Перегрузка и шаблоны16Шевченко А. В.Шаблоны функцийchar 	min(char x, char y);short

Слайд 17Программирование и основы алгоритмизации
Тема 6. Объектно-ориентированное программирование. Перегрузка и шаблоны
13
Шевченко

А. В.
Замещение шаблонов функций
template
T min(T x, T y)
{

return(x < y ? x : y);
}

char* min(char* x, char* y)
{
return(strcmp(x, y) < 0 ? x : y);
}

Программирование и основы алгоритмизацииТема 6. Объектно-ориентированное программирование. Перегрузка и шаблоны13Шевченко А. В.Замещение шаблонов функцийtemplateT min(T x, T

Слайд 18Программирование и основы алгоритмизации
Тема 6. Объектно-ориентированное программирование. Перегрузка и шаблоны
18
Шевченко

А. В.
Шаблоны классов
template
class Stack
{
private:
T *data;
int count;
public:

Stack(int Number);
~Stack();

void Input(T Value);
T Output();
};


Программирование и основы алгоритмизацииТема 6. Объектно-ориентированное программирование. Перегрузка и шаблоны18Шевченко А. В.Шаблоны классовtemplateclass Stack{private:  T 		*data;

Слайд 19Программирование и основы алгоритмизации
Тема 6. Объектно-ориентированное программирование. Перегрузка и шаблоны
19
Шевченко

А. В.
Реализация методов шаблонов классов
template
Stack::Stack(int Number)
{
data =

new T[Number];
}

template
Stack::~Stack()
{
delete [] data;
}


template
void Stack::Input(T Value)
{
data[count++] = Value;
}

template
T Stack::Output()
{
return(data[--count]);
}

Программирование и основы алгоритмизацииТема 6. Объектно-ориентированное программирование. Перегрузка и шаблоны19Шевченко А. В.Реализация методов шаблонов классовtemplateStack::Stack(int Number){

Слайд 20Программирование и основы алгоритмизации
Тема 6. Объектно-ориентированное программирование. Перегрузка и шаблоны
20
Шевченко

А. В.
Использование шаблонов в программе
void main()
{
Stack istack(20);

istack.Input(14);
istack.Input(11);
istack.Input(25);
int i = istack.Output();

Stack fstack(10);
fstack.Input(230.21);
fstack.Input(18.513);
fstack.Input(83.234);
float f = fstack.Output();

Stack cstack(24);
cstack.Input("First");
cstack.Input("Second");
char* c = cstack.Output();
}
Программирование и основы алгоритмизацииТема 6. Объектно-ориентированное программирование. Перегрузка и шаблоны20Шевченко А. В.Использование шаблонов в программеvoid main(){

Слайд 21Программирование и основы алгоритмизации
Тема 6. Объектно-ориентированное программирование. Перегрузка и шаблоны
21
Шевченко

А. В.
Полное и частичное замещение шаблонов классов
template
class

Converter
{
T1 obj1;
T2 obj2;
...
};

void main()
{
class Converter {...};

template
class Converter {...};

}

Полное замещение

Частичное замещение

Программирование и основы алгоритмизацииТема 6. Объектно-ориентированное программирование. Перегрузка и шаблоны21Шевченко А. В.Полное и частичное замещение шаблонов классовtemplateclass

Слайд 22Программирование и основы алгоритмизации
Тема 6. Объектно-ориентированное программирование. Перегрузка и шаблоны
22
Шевченко

А. В.
Создание новых типов на основе шаблонов классов
template
class Stack
{
private:

T *data;
int count;
public:
Stack(int Number);
~Stack();
...
};

typedef Stack StackOfCircles;
typedef Stack StackOfSquares;


StackOfCircles circles(100);
StackOfSquares squares(120);
Программирование и основы алгоритмизацииТема 6. Объектно-ориентированное программирование. Перегрузка и шаблоны22Шевченко А. В.Создание новых типов на основе шаблонов

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

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

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

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

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


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

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