Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
otvety_na_vse_bilety_progi.doc
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
492 Кб
Скачать
☆

Механизм шаблона

Опираясь на вызов функции, компилятор по умолчанию определяет значение параметризованного типа Type.

В тексте функции слово Type везде заменяется на int, получается один экземпляр функции.

Опираясь на второй вызов, Type заменяется на double – получился второй экземпляр функции.

Каждый экземпляр компилируется, происходит сборка и выполнение всей программы.

// Процесс создания экземпляра функции называется инстанцирование.

Пример 2: явное задание типа.

Если параметризована локальная переменная, то её тип не виден из вызова функции, и назначить конкретный тип мы должны явно при вызове функции.

//Если имя параметризованного типа не участвует в параметрах, его конкретное значение не может быть определено по умолчанию из вызова функции и должно быть задано явным образом.

#include <iostream>

using namespace std;

template<class Type1, class Type2, class Type3>

void func(Type2 x, Type3 y)

{

Type1 z;

…

}

void main(void)

{

func<int>(“Hello”,3.14);

или

func<int,char*,double>(“Hello”,3.14);

…

}

Особенности проекта с функциями-шаблонами

Функции шаблоны должны быть физически в одном файле вместе с вызывающей функцией(main).

Это достигается одним из двух способов:

1) функции-шаблоны помещаем в файл cpp и подключаем файл #include “шаблон.cpp” к вызывающей функции.

Прототипы функции не пишутся.

2) тексты функции шаблонов пишут в .h файл, оформленный обычным образом и подключают его директивой include к вызывающей функции.

Пример: Написать функцию-шаблон для вывода двумерного массива на экран.

shablon.h:

#ifndef SHABLON_H

#define SHABLON_H

#include<iostream>

using namespace std;

#include <iomanip>

template <class T>

void OutMas(T*p,int n,int m)

{

int i,j;

for (i=0; i<n;i++)

{

for (j=0; j<m;j++)

cout << setw(5) << *(p+i*m+j);

cout << endl;

}

return;

}

#endif

main.cpp:

#include<iostream>

using namespace std;

#include "shablon.h"

int main (void)

{

int A[2][3]= {1,2,3,4,5,6};

double B[3][3] = {1.5,2.6,3.7,4.8};

cout << "\n Целый массив:\n";

OutMas(A[0],2,3);

cout << "\n Дробный массив:\n";

OutMas(B[0],3,3);

return 0;

}

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]