Umumiy funksiyaning boshqacha ko’rinishi.
Quyidagi misolda swapargs funksiyasi boshqacharoq ko'rinishda e'lon qilingan. Ya'ni shablon birinchi satrda funksiya esa alohida satrda joylashgan.
template
void swapargs(X &a, X &b)
{
X temp;
temp = a;
a = b;
b = temp;
}
Lekin bu ko'rinishda birinchi va ikkinchi satr o'rniga bironta kod yozilsa xatolik beradi.
template
int c // ERROR
void swapargs(X &a, X &b)
{
X temp;
temp = a;
a = b;
b = temp;
}
Funksiya shablonini override (qayta yozish) qilish.
template void swapargs(X &a, X &b)
{
X temp;
temp = a;
a = b;
b = temp;
cout << "swapargs funksiya shabloni chaqirildi.\n";
}
// Bunda swapargs() funksiyasi faqatgina int tipi uchun ishlaydi.
10. void swapargs(int &a, int &b)
11. {
12. int temp;
13. temp = a;
14. a = b;
15. b = temp;
16. cout << " int tipi uchun maxsus swapargs funksiyasi.\n";
17. }
18. int main()
19. {
20. int i=10, j=20;
21. double x=10.1, y=23.3;
22. char a='x', b='z';
23. cout << "Original i, j: " << i << ' ' << j << '\n';
24. cout << "Original x, y: " << x << ' ' << y << '\n';
25. cout << "Original a, b: " << a << ' ' << b << '\n';
26. swapargs(i, j); // calls explicitly overloaded swapargs()
27. swapargs(x, y); // calls generic swapargs()
28. swapargs(a, b); // calls generic swapargs()
29. cout << "Swapped i, j: " << i << ' ' << j << '\n';
30. cout << "Swapped x, y: " << x << ' ' << y << '\n';
31. cout << "Swapped a, b: " << a << ' ' << b << '\n';
32. return 0;
33. }
Dastur natijasi:
Original i, j: 10 20
Original x, y: 10.1 23.3
Original a, b: x z
int tipi uchun maxsus swapargs funksiyasi.
swapargs funksiya shabloni chaqirildi.
swapargs funksiya shabloni chaqirildi.
Swapped i, j: 20 10
Swapped x, y: 23.3 10.1
Swapped a, b: z x
Funksiya shablonini Override qilish yangi usuli:
template<> void swapargs(int &a, int &b)
{
int temp;
temp = a;
a = b;
b = temp;
cout << " int tipi uchun maxsus swapargs funksiyasi.\n";
}
Funksiya shablonini overload qilish:
// Oddiy funksiyalardek, funksiya shablonini ham overload qilish mumkin.
#include
using namespace std;
// f() funksiya shablonining birinchi turi.
template void f(X a)
{
cout << "Inside f(X a)\n";
}
// f() funksiya shablonining ikkinchi turi.
template void f(X a, Y b)
10. {
11. cout << "Inside f(X a, Y b)\n";
12. }
13. int main()
14. Original i, j: 10 20
15. Original x, y: 10.1 23.3
16. Original a, b: x z
17. int tipi uchun maxsus swapargs funksiyasi.
18. swapargs funksiya shabloni chaqirildi.
19. swapargs funksiya shabloni chaqirildi.
20. Swapped i, j: 20 10
21. Swapped x, y: 23.3 10.1
22. Swapped a, b: z x
23. {
24. f(10); // calls f(X)
25. f(10, 20); // calls f(X, Y)
26. return 0;
27. }
Funksiya shablonining kamchiligi:
• Umumiy funksiyalar funksiya overloadining o'rnini bosishi mumkin. Lekin bu yerda bitta kamchilik mavjud. Biz oddiy funksiyani overload qilganimizda, har xil ma'lumotlar tipi uchun funksiya tanasini har xil qilib yozishimiz mumkin. Lekin umumiy funksiyada har xil tip qabul qila olgani bilan funksiya tanasi har doim bir xil bo'ladi, chunki bitta funksiyaga murojaat bo'ladi.
• Faqatgina ma’lumotlar tipi har xil bo‟la oladi.
Do'stlaringiz bilan baham: |