Operatorlar, funksiya chaqiruvlari va funksiya shablonlari. Funksiya shablonlari asosiy ma’lumotlar turlari (char, int, double va boshqalar) bilan ham, sinflar bilan ham ishlaydi (lekin nyuans mavjud). Shablon nusxasi oddiy funksiya kabi tuzilgan. Oddiy funksiyada ushbu funksiyada ishlatiladigan har qanday operatorlar yoki boshqa funksiyalarga murojaatlar aniqlangan/qayta yuklangan boʻlishi kerak, aks holda kompilyatsiya xatosi olinadi. Xuddi shunday, funksiya shablonida mavjud boʻlgan har qanday bayonotlar yoki boshqa funksiyalarga murojaatlar faktik (joʻnatiladigan) ma’lumotlar turlari bilan ishlash uchun aniqlanishi / qayta yuklanishi kerak. Bu holatni amalda koʻrib chiqamiz (3.121-listing).
3.121-listing class Dollars
{
private:
int m_dollars;
public:
Dollars(int dollars)
{
m_dollars = dollars;
}
};
Dollars sinfidagi obyektlar bilan max() funksiyasini chaqirishga harakat qilinganda nima sodir boʻlishini koʻrib chiqamiz (3.122-listing).
3.122-listing template const T& max(const T& a, const T& b)
{
return (a > b) ? a : b;
}
C++ tili max() funksiya shablonining quyidagi nusxasini yaratadi:
const Dollars& max(const Dollars &a, const Dollars &b)
{
return (a > b) ? a : b;
}
Kompilyator ushbu funksiyani kompilyatsiya qilishga harakat qiladi, lekin u ishlamaydi, chunki C++ a> b ifodasini qanday boshqarishni bilmaydi. Shunday qilib, quyidagi xato paydo boʻladi:
Ошибка C2676 бинарный ">": "const T" не определяет этот оператор или преобразование к типу приемлемо к встроенному оператору1 Xato xabari Dollars sinfi uchun > operatorini qayta yuklanmaganini koʻrsatadi. Funksiya qayta yuklangan variantni qaraymiz (3.123-listing).