🗊Объектно-ориентированное программирование С++. Лекция 8

Категория: Информатика
Нажмите для полного просмотра!
Объектно-ориентированное программирование  С++. Лекция 8, слайд №1Объектно-ориентированное программирование  С++. Лекция 8, слайд №2Объектно-ориентированное программирование  С++. Лекция 8, слайд №3Объектно-ориентированное программирование  С++. Лекция 8, слайд №4Объектно-ориентированное программирование  С++. Лекция 8, слайд №5Объектно-ориентированное программирование  С++. Лекция 8, слайд №6Объектно-ориентированное программирование  С++. Лекция 8, слайд №7Объектно-ориентированное программирование  С++. Лекция 8, слайд №8Объектно-ориентированное программирование  С++. Лекция 8, слайд №9Объектно-ориентированное программирование  С++. Лекция 8, слайд №10

Вы можете ознакомиться и скачать Объектно-ориентированное программирование С++. Лекция 8. Презентация содержит 10 слайдов. Презентации для любого класса можно скачать бесплатно. Если материал и наш сайт презентаций Вам понравились – поделитесь им с друзьями с помощью социальных кнопок и добавьте в закладки в своем браузере.

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


Слайд 1





Объектно-ориентированное программирование
С++. Лекция 8
Описание слайда:
Объектно-ориентированное программирование С++. Лекция 8

Слайд 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);
}
Описание слайда:
ШАБЛОНЫ Предположим, что перед нами стоит задача создания списка элементов некоторого типа. Например, списка целых чисел. Реализация может выглядеть примерно так: 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); }

Слайд 3





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

			<template> <список параметров> объявление
Объявление описывает функцию или класс. Объявление может быть только глобальным.
template <class T> 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 <int> v1(20);
Vector <Complex> v2(10);
typedef Vector <Complex> CVector;
Работа с именем шаблонного класса ведется так же, как и просто с именем класса.
class SVector: public Vector<Complex> {…}
Описание слайда:
Понятие шаблона Введено в работе Б.Строуструпа "Parameterized Types for C++", 1988. Определение шаблона: <template> <список параметров> объявление Объявление описывает функцию или класс. Объявление может быть только глобальным. template <class T> 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 <int> v1(20); Vector <Complex> v2(10); typedef Vector <Complex> CVector; Работа с именем шаблонного класса ведется так же, как и просто с именем класса. class SVector: public Vector<Complex> {…}

Слайд 4





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

Слайд 5





Шаблоны функций
template <class T> 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)
Описание слайда:
Шаблоны функций template <class T> 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)

Слайд 6





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

Слайд 7





Пример
struct S
{   int a, b; };

template <class T> T* create()
{	  T *a;
	  a = new T;
	  return a;
}
template <class T> class Ccreator
{ 	  public:
	    static T* create();
};

int *Ccreator<int>::create()
{  int *n;
    n = new int;
   *n = 123;
   return n;
}
Описание слайда:
Пример struct S { int a, b; }; template <class T> T* create() { T *a; a = new T; return a; } template <class T> class Ccreator { public: static T* create(); }; int *Ccreator<int>::create() { int *n; n = new int; *n = 123; return n; }

Слайд 8





Примеры
template <class T> 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 <class T> void TList<T>::add(TList *e)
{
  TList *t;
  for(t=this;t->next;t=t->next);
  t->next = e;
}
template <class T> void TList<T>::print(void)
{
  for(TList *t=this;t;t=t->next)
    printf("%d ", t->val);
}
Описание слайда:
Примеры template <class T> 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 <class T> void TList<T>::add(TList *e) { TList *t; for(t=this;t->next;t=t->next); t->next = e; } template <class T> void TList<T>::print(void) { for(TList *t=this;t;t=t->next) printf("%d ", t->val); }

Слайд 9





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

Слайд 10





Множество параметров
Параметров шаблонов может быть несколько:
template <class A, class B> void print(A e, B x) { printf("%d %d", e.val, x); }
template <class T1, class T2> class L12
{
  T1 t1;
  T2 t2;
};
...
print(ctpl, 1);
L12<int, int> s;
Описание слайда:
Множество параметров Параметров шаблонов может быть несколько: template <class A, class B> void print(A e, B x) { printf("%d %d", e.val, x); } template <class T1, class T2> class L12 { T1 t1; T2 t2; }; ... print(ctpl, 1); L12<int, int> s;



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