- •51. Организация файловой системы fat
- •52. Организация файловой системы ext2
- •53. Язык регулярных выражений и его применение, шаблоны имен файлов
- •2)Символы – квантификаторы(повторители):
- •54. Пользовательский интерфейс ос
- •55. Язык сценариев ос
- •56. Процессы и механизмы многозадачности
- •57. Переменные величины в яп, их атрибуты, время жизни, область видимости
- •58. Типы данных в яп
- •59. Алгоритмы обработки массивов
- •60. Выражения и операции. Перегрузка операций.
- •61. Операторный базис языков программирования.
- •62. Функция как средство структурирования программы.
- •69. Механизмы создания и уничтожения объектов
- •70. Наследование в яп
- •Виртуальные функции
- •Синтаксис шаблона функции
- •Примеры определений шаблонов функций
- •Прототип шаблона функции
- •Использование шаблона функции
- •Специализация шаблонов функции
- •Шаблоны классов
- •Синтаксис шаблона класса
- •Пример определения шаблона класса
- •Использование шаблона класса
- •Векторы
- •Уравнение прямой
- •Общее уравнение прямой
- •Расстояние от точки до прямой
- •Углы между двумя прямыми, между прямой и плоскостью.
- •Общее уравнение плоскости
- •Уравнение плоскости
- •Уравнение поверхности:
- •35. Устойчивость решений дифференциальных уравнений
- •Простейшие типы точек покоя. Автономные динамические системы двух уравнений первого порядка. Типы особых точек на фазовой плоскости
- •39. Алгебра логики.
- •3. Основные законы логики.
- •5. Нормальные формы. Совершенные нормальные формы.
- •6. Арифметические операции в алгебре логики. Полином Жегалкина.
- •7. Полнота и замкнутость (примеры полных систем). Теорема Поста.
- •Вопрос 40 Графы и их свойства
- •41. Маршруты в графах и деревья.
- •42. Сети и алгоритмы на сетях.
- •43. Вероятность случайного события. Основные свойства вероятности.
- •44. Случайные величины и законы их распределения.
- •45. Числовые характеристики случайных величин.
- •46. Методы проверки статических гипотез.
- •47. Математические модели операций.
- •48. Матричные игры.
- •49.Линейное программирование. Симплекс-метод.
- •50. Выпуклое программирование.
- •2) Различные формы условий оптимальности.
- •74. Проектирование структуры реляционной базы данных. Метод er-диаграмм (сущность-связь).
- •75. Языки описания запросов. Язык sql.
- •Select [all | distinct] –команда выборки данных
Прототип шаблона функции
Вы можете создать прототип шаблона функции в виде его предварительного объявления. Такое объявление информирует компилятор о наличии шаблона, а также сообщает об ожидаемых параметрах. Например, прототип шаблона функции Sort будет выглядеть так:
template <class T> void Sort(T array[], Tsize size);
Имена формальных параметров шаблона могут не совпадать в предварительном объявлении и определении шаблона. Так, например, в следующем фрагменте и прототип шаблона, и определение шаблона относятся к одной и той же функции:
template <class T> T max(T, T);
. . .
template <class Type>
Type max(Type a, Type b)
{
if (a > b) return a; else return b;
}
Использование шаблона функции
Шаблон функции описывает, как конкретная функция может быть построена на основании одного или нескольких фактических типов. Компилятор автоматически создает представитель тела функции для указанных в вызове типов. Такой процесс называется конкретизацией. Он происходит при вызове шаблонной функции.
Например, в следующем примере функция min() конкретизируется дважды: один раз типом int и один раз типом double:
template <class Type>
Type min(Type a, Type b)
{
if (a < b) return a; else return b;
}
void main()
{
int x = 4, y = 5, z;
z = min(x, y);
double t = 6.56, r = 3.07, p;
p = min(t, r);
}
Специализация шаблонов функции
Специализированная функция шаблона – это обычная функция, имя которой совпадает с именем функции в шаблоне, но которая определяется для параметров специфических типов. Специализированные функции шаблона определяют в том случае, когда обобщенный шаблон не годится для некоторого типа данных. Например, функция шаблона min
template <class Type>
Type min(Type a, Type b)
{
if (a < b) return a; else return b;
}
не может применяться для строк (для типа char*) , так как генерируемый компилятором код будет просто сравнивать их положение в памяти (адреса). Для корректного сравнения строк можно определить специализированную функцию:
char* min(char* s1, char* s2)
{
if (strcmp(s1,s2)>0) return s2; else return s1;
}
Тогда обращаться к такой функции можно так же, как и к функции шаблона:
void main ()
{
int i1 = 3, i2 = 5;
cout << “max int = ” << max(i1, i2) << endl;
char* s1 = “Golden Eagle”;
char* s2 = “Perigrine Falcon”;
cout << “max str = “ << max(s1, s2) << endl;
}
Шаблоны классов
Шаблон класса дает обобщенное определение семейства классов, использующее произвольные типы или константы. Шаблон определяет данные-члены шаблона и функции-члены шаблона. После определения шаблона класса можно предписать компилятору генерировать на его основе новый класс для конкретного типа или константы.
Синтаксис шаблона класса
template <<список аргументов шаблона>>
class <имя класса>
<тело класса>
За ключевым словом template следуют один или несколько аргументов (параметров), заключенных в угловые скобки и отделяемых друг от друга запятыми. Каждый аргумент может представлять собой ключевое слово class, за которым следует идентификатор, обозначающий параметризованный тип. Список аргументов шаблона не может быть пустым.
Затем следует определение класса. Оно аналогично определению обычного класса, за исключением того, что использует список аргументов шаблона.
Параметры шаблона, состоящие из ключевого слова class и следующего за ним идентификатора, часто называют параметрами типа. Другими словами, они информируют компилятор, что шаблон предполагает тип в качестве аргумента.