X

Код презентации скопируйте его

Ширина px

Вы можете изменить размер презентации, указав свою ширину плеера!

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

Скачать эту презентацию

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

Скачать эту презентацию

Cлайд 1
Объектно-ориентированное программирование С++. Лекция 8 Карпов В.Э. ООП C++ Объектно-ориентированное программирование С++. Лекция 8 Карпов В.Э. ООП C++
Cлайд 2
ШАБЛОНЫ Предположим, что перед нами стоит задача создания списка элементов не... ШАБЛОНЫ Предположим, что перед нами стоит задача создания списка элементов некоторого типа. Например, списка целых чисел. Реализация может выглядеть примерно так: 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(); ООП C++
Cлайд 3
Понятие шаблона Введено в работе Б.Строуструпа "Parameterized Types for 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++
Cлайд 4
Шаблоны функций-членов template T&Vector::operator[](int i) {...}; template v... Шаблоны функций-членов 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++
Cлайд 5
Шаблоны функций template T max(T a, T b) {return a>b?a:b;}; int a, b; 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); //max(int, int) char m2 = max(c,d); //max(char, char) int m3 = max(a,c); // - ошибка: нельзя сгенерировать max(int, char) ООП C++
Cлайд 6
Ограничения Каждый параметр шаблона, заданный в списке параметров, должен быт... Ограничения Каждый параметр шаблона, заданный в списке параметров, должен быть использован в типах параметров шаблона функции. template T* create(); // Ошибка template void f() { T a; … }; // Ошибка template class creator { static T* create(); } int *creator::create(); ООП C++
Cлайд 7
Пример struct S { int a, b; }; template T* create() { T *a; a = new T; return... Пример 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++
Cлайд 8
Примеры template class TList {public: T val; TList *next; void add(TList *e);... Примеры 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;} }; ООП C++
Cлайд 9
Продолжение void main(void) { TList tl=1; tl.add(&TList(2)); TList *tpl = new... Продолжение 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++
Cлайд 10
Множество параметров Параметров шаблонов может быть несколько: template void ... Множество параметров Параметров шаблонов может быть несколько: template 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++
Скачать эту презентацию
Наверх