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


Объектно-ориентированное программирование С++

ООП C++ШАБЛОНЫПредположим, что перед нами стоит задача создания списка элементов некоторого типа. Например, списка целых чисел. Реализация может выглядеть примерно так:class List{ int val; List *next;public: void add(List *e); void add(int

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

Слайд 1ООП C++
Объектно-ориентированное программирование
С++. Лекция 8
Карпов В.Э.

ООП C++Объектно-ориентированное программированиеС++. Лекция 8Карпов В.Э.

Слайд 2ООП C++
ШАБЛОНЫ
Предположим, что перед нами стоит задача создания списка элементов

некоторого типа. Например, списка целых чисел. Реализация может выглядеть примерно

так:
class List
{
int val;
List *next;
public:
void add(List *e);
void add(int n)
{
List *t = new List(n);
add(t);
}
void print(void);
List(int v0) { val = v0; next = NULL; };
};
void List::add(List *e)
{
List *t;
for(t=this;t->next;t=t->next);
t->next = e;
}
void List::print(void)
{
for(List *t=this;t;t=t->next)
printf("%d ", t->val);
}

Пример работы со списком:
List L=1;
L.add(&List(2));
List *pl = new List(3);
L.add(pl);
L.add(4);
L.print();


Слайд 3ООП C++
Понятие шаблона
Введено в работе Б.Строуструпа "Parameterized Types for C++",

1988.
Определение шаблона:

объявление
Объявление описывает функцию или класс. Объявление

может быть только глобальным.
template class Vector
{
T* v;
int sz;
public:
Vector(int n) { sz = n; v = new T[sz]; };
void sort(void);
T& operator[](int i) { return v[i]; }
};
Vector v1(20);
Vector v2(10);
typedef Vector CVector;

Работа с именем шаблонного класса ведется так же, как и просто с именем класса.
class SVector: public Vector {…}
ООП C++Понятие шаблонаВведено в работе Б.Строуструпа

Слайд 4ООП C++
Шаблоны функций-членов
template T&Vector::operator[](int i) {...};
template

void Vector::sort(void) {...};
При использовании шаблонных функций на компилятор ложится работа

по определению их реализации на основе анализа их типа.
Vector cv(100);
Vector ci(100);
f(cv); //f(vector)
f(ci); //f(vector)
ООП C++Шаблоны функций-членовtemplate T&Vector::operator[](int i) {...};template void Vector::sort(void) {...};При использовании шаблонных функций на компилятор ложится работа по

Слайд 5ООП C++
Шаблоны функций
template T max(T a, T b)

{return a>b?a:b;};
int a, b;
char c, d;
int m1 = max(a,b); //max(int,

int)
char m2 = max(c,d); //max(char, char)
int m3 = max(a,c); // - ошибка: нельзя сгенерировать max(int, char)
ООП C++Шаблоны функцийtemplate T max(T a, T b) {return a>b?a:b;};int a, b;char c, d;int m1 = max(a,b);

Слайд 6ООП C++
Ограничения
Каждый параметр шаблона, заданный в списке параметров, должен быть

использован в типах параметров шаблона функции.
template T* create();

// Ошибка
template void f()
{
T a;

}; // Ошибка
template class creator
{
static T* create();
}
int *creator::create();
ООП C++ОграниченияКаждый параметр шаблона, заданный в списке параметров, должен быть использован в типах параметров шаблона функции.template T*

Слайд 7ООП C++
Пример
struct S
{ int a, b; };

template

T* create()
{ T *a;
a = new T;
return a;
}
template

class Ccreator
{ public:
static T* create();
};

int *Ccreator::create()
{ int *n;
n = new int;
*n = 123;
return n;
}

void main(void)
{
int *t;
S *s;
t = create();
s = create();
t = Ccreator::create();
}

ООП C++Примерstruct S{  int a, b; };template T* create(){	 T *a;	 a = new T;	 return

Слайд 8ООП C++
Примеры
template class TList
{public:
T val;
TList *next;

void add(TList *e);
void add(T n)
{ TList *t =

new TList(n); add(t); }
void print(void);
TList(T v0) { val = v0; next = NULL; };
};
template void TList::add(TList *e)
{
TList *t;
for(t=this;t->next;t=t->next);
t->next = e;
}
template void TList::print(void)
{
for(TList *t=this;t;t=t->next)
printf("%d ", t->val);
}

template void print(T e) { printf("%d ", e.val); }
// Вплоть до момента вызова этой функции компилятор ничего не знает о
// типе аргумента
template void print()
{
T x;
printf("%d ", 1);
}

class C
{
int n, n2;
public:
C(int k=0) { n=k; n2=n-1;}
};


Слайд 9ООП C++
Продолжение
void main(void)
{
TList tl=1;
tl.add(&TList(2));
TList *tpl = new

TList(3);
tl.add(tpl);
tl.add(4);
tl.print();
typedef TList CList;
CList cl=1;
cl.add(&CList(2));

CList *cpl = new CList(3);
cl.add(cpl);
cl.add(4);
cl.print();
TList ctpl = C(31);
ctpl.add(32);
ctpl.print();
print(ctpl);
print(); //Ошибка: не найден образец для print()
print(); //А вот так можно
}
ООП C++Продолжениеvoid main(void){ TList tl=1; tl.add(&TList(2)); TList *tpl = new TList(3); tl.add(tpl); tl.add(4); tl.print(); typedef TList CList;

Слайд 10ООП C++
Множество параметров
Параметров шаблонов может быть несколько:
template

B> void print(A e, B x) { printf("%d %d", e.val,

x); }
template class L12
{
T1 t1;
T2 t2;
};
...
print(ctpl, 1);
L12 s;
ООП C++Множество параметровПараметров шаблонов может быть несколько:template void print(A e, B x) { printf(

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

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

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

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

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


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

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