Назначение **шаблона** - повышение повторного использования кода.
## Шаблонные классы
```cpp
template <class T>
class pixel {
	public:
		T get_x() const;
		static T d;
}

template <class T>
T pixel<T>::get_x() const {
	return x;
}

pixel<int> t1, t2(2, 2, "red", 2), t3(t2), *p;
pixel<float> k1, k2(3.0, 4.0, "цвет", 5.0), k3(k2), *pp;
pixel<double> ...
pixel<char> ...
```
## Шаблонные функции
```cpp
template<class T>
void copy(T a[], T b[], int k) {
	for (int i = 0; i < k; i++) a[i] = b[i];
	int i1[50], i2[50];
	float d1[10], d2[20];
	char c1[100], c2[30];
	char* p1; char* p2;
	copy(i1, i2, 10);
	copy(d1, d2, 20);
	copy(c1, c2, 5);
	copy(i1, d2, 10);
	copy(p1, i1)
}
```
Если в классе есть другая функция и она не использует шаблон, то компилятор определяет ее 1 раз. Если использует - то компилятор будет ее определять многократно.