Лекция 2 ООП 2 семестр ШАБЛОНЫ
Шаблоны Позволяют параметризировать определение функции или класса так, чтобы это определение могло применяться к аргументам (данным) разных типов
Понятие шаблона. Состав класса и алгоритмы работы его методов могут использоваться для различных типов членов класса Массив элементов с возможностью добавлять новые элементы в конец Класс для целых для вещественных Класс для Класс комплексных для строк ТИП *V указатель на первый элемент ТИП *P указатель на последний элемент int sz число элементов МЕTОДЫ Положить, взять, узнать размер
Понятие шаблонного класса template <class T> class stack Т параметр – “заменитель типа” {T* v; T* p; int sz; v p Начало , конец и длина стека public: stack(int s) ~stack(void) void push(T a) T pop(void) int size(void) }; sz { v = p = new T[sz=s]; } { delete[] v; } { *p++ = a; } { return *--p; } { return p-v; }
Генерация класса по шаблону q Для генерации каждого конкретного класса пользователь должен указать каким должен быть тип содержащихся в нем объектов. q stack <int> A(20); q stack <float> B(100);
Шаблон класса для матрицы q Создать класс для матрицы, состоящей из вещественных или целых чисел. □ Перегрузить квадратные скобки. □ Создать методы • • ввода и вывода Сортировки матрицы нормы вектора. Нормы матрицы
Шаблон матрицы Подключение библиотек #include <stdio> #include <iomanip> #include <fstream> #include <stdlib. h> Максимальное число строк и столбцов матрицы #define LINES 15 /* строк */ #define COLUMNS 15 /* столбцов */ Файлы для ввода и вывода матрицы #define file_inp "matr. dat" #define file_out "matr_out. dat"
Класс вектор //************** template <class T> class Vector { public: T V[COLUMNS]; int Size; T& operator[](int i) {return V[i]; } void Input(ifstream& f, int m ); void Output(ofstream& f); void Print(); void Sort(); };
Сортировка вектора (описание реализации вне класса) // template <class T> void Vector<T>: : Sort() { int i, j, n=Size; T temp; do { j=0; for (i=0; i<(n-1); i++) { if (V[i] > V[i+1]) { temp=V[i]; V[i]=V[i+1]; V[i+1]=temp; j=1; } } } while (j==1); }
Ввод вектора из файла template <class T> void Vector<T>: : Input(ifstream& f, int m ) {int i; Size=m; for(i=0; i < m; i++) {f>>V[i]; } } void Vector<char>: : Input(ifstream& f, int m ) {int i; Size=m; char c='