
- •Void main (){
- •Операции, определенные по умолчанию над структурированными объектами
- •Void binar(unsigned char ch)
- •Void main() { int k;
- •Расширение действия (перегрузка) стандартных операций
- •Доступ к компонентам структурированного объекта
- •Void ff(cl1 cl,cl2 c2) { тело_функции }
- •Void f1(...);
- •Void f2(...);
- •Классы и шаблоны
- •Int size; // Количество элементов в массиве
- •Vector(int); // Конструктор класса vector
- •Имя_параиетризованного_класса
- •Int length;
- •Void main () {
- •Наследование и другие возможности классов Наследование классов
- •2. Множественное наследование и виртуальные базовые классы
- •Void show ()
- •Void hide()
- •Void riesquare(void)
- •Void show()
- •Void hide()
- •Void show(void)
- •Void hide()
- •Void main()
- •Void show() // Изобразить на экране эллипс
- •Void hide() { int cc, bk;
- •Int min(int valuel, int value2)
- •Void show()
- •Void hide() // Убрать изображение с экрана дисплея
- •Void main()
- •3. Виртуальные функции и абстрактные классы
- •Void main (void)
- •Имя_проиаводного_класса: : show ()
- •Иня_объекта_производноро_класса. Show ()
- •Void main(void)
- •Void sos (int) ;
- •Void func(char);
- •Void sos (int) ;
- •Void chain::showAll(void) // Изображение элементов списка
- •Void main()
- •4. Локальные классы
- •Void showSeg() // Изобразить отрезок на экране
- •Void showSquare(void) // изобразить квадрат
- •5. Классы и шаблоны
- •Int size; // Количество элементов в массиве
- •Vector(int); // Конструктор класса vector
- •Имя_параиетризованного_класса
Int size; // Количество элементов в массиве
public:
Vector(int); // Конструктор класса vector
~Vector() { delete[] data; } // Деструктор
// Расширение действия (перегрузка) операции "[]":
Т& operator[] (int i) { return data[i]; } };
// Внешнее определение конструктора класса:
template <Cclass T> Vector <T>::Vector(int n) { data = new T[n];
size = n; };
Когда шаблон введен, у программиста появляется возможность определять конкретные объекты конкретных классов, каждый из которых параметрически порожден из шаблона. Формат определения объекта одного из классов, порождаемых шаблоном классов:
Имя_параиетризованного_класса
<фактические_параметры_шаблона> имя_объекта (паракетры_конструктора) ;
В нашем случае определить вектор, имеющий восемь вещественных координат типа double, можно следующим образом:
Vector <double> Z(8); Проиллюстрируем сказанное следующей программой:
//Р10-11.СРР - формирование классов с помоцью шаблона
#include "template.vec" // Шаблон классов "вектор"
#include <iostream.h>
main()
{ // Создаем объект класса "целочисленный вектор":
Vector <int> Х(5);
// Создаем объект класса "символьный вектор":
Vector <char> C(5);
// Определяем компоненты векторов:
for (int i = 0; i < 5; i++)
{ X[i] = i; C[i] = 'A' + i;}
for (i - 0; i < 5 ; i++)
cout << " " << X[i] << ' ' << C[i]; }
Результат выполнения программы:
0A 1B 2 С 3D 4E
В программе шаблон семейства классов с общим именем vector используется для формирования двух классов с массивами целого и символьного типов. В соответствии с требованием синтаксиса имя параметризованного класса, определенное в шаблоне (в примере Vector), используется в программе только с последующим конкретным фактическим параметром (аргументом), заключенным в угловые скобки. Параметром может быть имя стандартного или определенного пользователем типа. В данном примере использованы стандартные типы int и char. Использовать имя Vector без указания фактического параметра шаблона нельзя - никакое умалчиваемое значение при этом не предусматривается.
В списке параметров шаблона могут присутствовать формальные параметры, не определяющие тип, точнее - это параметры, для которых тип фиксирован:
//Р10-12.СРР #include <iostream.h> template <class T, int size = 64> class row { T *data; int length; public: row()
{ length = size;
data = new T[size];
}
~row() { deleted data; } T& operator [] (int i) { return data[i]; }
};
void main О { row <float,8> rf; row <int,8> ri; for (int i = 0; i < 8; i++)
{ rf[i] = i; ri[i] = i * i; } for (i = 0; i < 8; i++)
cout<<« " " << rf[i] << ' ' << ri[i]; }
Результат выполнения программы:
00 11 2 4 39 4 16 5 25 6 36 7 49
В качестве аргумента, заменяющего при обращении к шаблону параметр size, взята константа. В общем случае может быть использовано константное выражение, однако выражения, содержащие переменные, использовать в качестве фактических параметров шаблонов нельзя.