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

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


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

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

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

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

Презентация на тему Объектно-ориентированное программирование С++

ООП C++ШАБЛОНЫПредположим, что перед нами стоит задача создания списка элементов некоторого типа. Например, списка целых чисел. Реализация может выглядеть примерно так:class List{ int val; List *next;public: void add(List *e); void add(int n) { List *t
Объектно-ориентированное программированиеС++. Лекция 8Карпов В.Э. ООП C++ШАБЛОНЫПредположим, что перед нами стоит задача создания списка элементов некоторого типа. ООП C++Понятие шаблонаВведено в работе Б.Строуструпа ООП C++Шаблоны функций-членовtemplate T&Vector::operator[](int i) {...};template void Vector::sort(void) {...};При использовании шаблонных функций ООП C++Шаблоны функцийtemplate T max(T a, T b) {return a>b?a:b;};int a, b;char ООП C++ОграниченияКаждый параметр шаблона, заданный в списке параметров, должен быть использован в ООП C++Примерstruct S{  int a, b; };template T* create(){	 T *a; ООП C++Примерыtemplate class TList{public: T val; TList *next; void add(TList *e); void ООП C++Продолжениеvoid main(void){ TList tl=1; tl.add(&TList(2)); TList *tpl = new TList(3); tl.add(tpl); ООП C++Множество параметровПараметров шаблонов может быть несколько:template void print(A e, B x)
Слайды презентации

Слайд 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

ООП C++Понятие шаблонаВведено в работе Б.Строуструпа

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 {…}

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

ООП C++Шаблоны функций-членовtemplate T&Vector::operator[](int i) {...};template void Vector::sort(void) {...};При использовании шаблонных

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

компилятор ложится работа по определению их реализации на основе анализа их типа.
Vector cv(100);
Vector ci(100);
f(cv); //f(vector)
f(ci); //f(vector)

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

ООП C++Шаблоны функцийtemplate T max(T a, T b) {return a>b?a:b;};int 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)

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

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

должен быть использован в типах параметров шаблона функции.
template

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

}; // Ошибка
template class creator
{
static T* create();
}
int *creator::create();

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

template

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

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();
}


Слайд 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

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

= 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(); //А вот так можно
}

  • Имя файла: obektno-orientirovannoe-programmirovanie-s.pptx
  • Количество просмотров: 109
  • Количество скачиваний: 0