int main()
{
int i = 5, j = 6;
double d = 8.6789, b = 6.7894;
char c1='a', c2 = 'f';
swap (i, j);
swap (d, b);
swap (c1, c2);
}
template < class A, class B, class C> void f( ) { …}
template < class T>
void f( T& a, int k)
{
a = a + k;
}
int main()
{
int i = 5;
f ( i, 99 );
//можно f
//будет выполнено преобразование в //double
return 0;
}
Явное указание аргумента шаблона при вызове
template
void f(T k) {cout << k; }
int myfunction(char j)
{ f
return 5;
}
int main()
{
myfunction ('a'); //97 печатается
return 0;
}
В списке параметров шаблона должны быть только классы, входящие в число входных аргументов функции
Тип возвращаемого значения может входить в список параметров шаблона, если такой тип есть во входных аргументах функции
template < class T>
T f(int c , int k)
{
T a = 0;
a = a + k + c;
return a;
}
int main()
{
int i = 5;
int k = f ( i, 99 );// ошибка
return 0;
}
Дополнительные возможности задания специализированных шаблонов
Elem * insert( int key, int d)// вставка после узла с ключом key
{
if (Elem * pkey = find(key))
{
Elem * pt = new Elem(d);
pt->next = pkey->next;
pt->prev = pkey;
pkey->next = pt;
if ( pkey != last ) (pt->next)->prev = pt;
else
last = pt;
return pt;
}
return 0;
}
void print_reverse()
{
Elem * pt = last;
while ( pt )
{
cout << pt->data << '\n';
pt = pt->prev;
}
}
Elem * find ( int d )
{
Elem * pt = first;
while ( pt )
{
if ( pt->data == d ) return pt;
pt = pt->next;
}
return NULL;
}
int main()
{
List l;
for ( int i = 1; i < 25; i++ ) l.Add(i);
l.print();
l.print_reverse();
l.insert(1,99);
if ( !l.remove(6)) cout << "Not founf!\n";
l.print();
l.print_reverse();
return 0;
}
Elem * insert( T key, T d)// вставка после узла с ключом //key
{
if (Elem * pkey = find(key))
{
Elem * pt = new Elem(d);
pt->next = pkey->next;
pt->prev = pkey;
pkey->next = pt;
if ( pkey != last ) (pt->next)->prev = pt;
else
last = pt;
return pt;
}
return 0;
}
void print_reverse()
{
Elem * pt = last;
while ( pt )
{
cout << pt->data << '\n';
pt = pt->prev;
}
}
Elem * find ( T d )
{
Elem * pt = first;
while ( pt )
{
if ( pt->data == d ) return pt;
pt = pt->next;
}
return NULL;
}
int main()
{
List < int> l;
for ( int i = 1; i < 5; i++ ) l.Add(i);
l.print();
l.print_reverse();
l.insert(1,99);
if ( !l.remove(4)) cout << "Not found!\n";
l.print();
l.print_reverse();
List < char> lch;
for ( int i = 0; i < 5; i++ ) lch.Add('a'+i);
lch.print();
lch.print_reverse();
lch.insert('a','z');
if ( !lch.remove('a')) cout << "Not found!\n";
lch.print();
lch.print_reverse();
return 0;
}
void Add( T d)// вставка в конец списка
{
Elem * t = new Elem(d);
if ( first == NULL )
{
first = last = t;
}
else
{
t->prev = last;
last->next = t;
last = t;
}
}
void print()
{
Elem * pt = first;
while ( pt )
{
cout << pt->data << '\n';
pt = pt->next;
}
}
public: class Iterator
{
List * p;
Elem * tek;
public:
Iterator(List *_p):p(_p){tek = p->first;}
T gettek(){return tek->data;}
bool next()
{
if ( tek == NULL ) return false;
tek = tek->next;
if ( tek != NULL) return true;
return false;
}
void setfirst(){ tek = p->first;}
};
};
void main()
{
List
for ( int i = 0; i < 10; i++)
qq.Add(i);
List
for ( i = 0; i < 5; i++)
{
cout << it.gettek()<< '\n';
it.next();
}
}
template <список параметров шаблона> тип_возврата имя_класса
< параметры шаблона> :: имя_функции ( список параметров функции)
{
// тело функции
}
template < class T, int k = 500> class Block
{
};
class Block
};
Если не удалось найти и скачать презентацию, Вы можете заказать его на нашем сайте. Мы постараемся найти нужный Вам материал и отправим по электронной почте. Не стесняйтесь обращаться к нам, если у вас возникли вопросы или пожелания:
Email: Нажмите что бы посмотреть