Ogohlantirish. Umumiy maxValue funksiyasi ixtiyoriy turdagi ikkita qiymatning kattasini topish uchun mo`ljallangan bo`lib, quyidagicha shartlar asosida ishlaydi:
■ The two values have the same type;
■ The two values can be compared using the >operator.
Masalan, agar siz bir qiymatni int turida, ikkinchisini esa, double turida bersangiz, kompilyatsion xatolik yuz beradi. Chunki kompilyator funksiyani chaqirishda mos turni aniqlay olmaydi. Agar siz funksiyani maxValue(Circle(1), Circle(2)) ko`rinishda chaqirsangiz, kompilyatsion xatolik yuz beradi. Chunki Circle sinfida > operatori aniqlanmagan.
Maslahat. Parametr turini belgilashda yoki dan foydalanishimiz mumkin. dan foydalangan ma’qulroq, chunki – tasviriydir. ni esa, sinf aniqlanishi bilan adashtirib yuborish mumkin.
Eslatma. Ba’zi hollarda funksiya shabloni bittadan ko`p parametrlarga ega bo`lishi mumkin. Bunday vaziyatda parametrlarni kabi, barchasini bitta uchburchak qavslar oralig`iga, vergullar bilan ajratilgan holda joylashtiriladi.
1.1-kodli ro`yxatdagi asosiy funksiya parametrlari qiymat qabul qilib oluvchi sifatida aniqlangan. Uni havola qabul qilib oladigan qilib, 1.2-kodli ro`yxatdagi kabi o`zgartirishimiz mumkin.
1.2-kodli ro`yxat. GenericMaxValuePassByReference.cpp
#include
#include
using namespace std;
template T>
T maxValue(const T& value1, const T& value2)
{
if (value1 > value2)
return value1;
else
10. return value2;
11. }
12. int main()
13. {
14. cout << "1 va 3 ning kattasi: " << maxValue(1, 3) << endl;
15. cout << "1.5 va 0.3 ning kattasi: "
16. << maxValue(1.5, 0.3) << endl;
17. cout << "‘A’ va ‘N’ ning kattasi: "
18. << maxValue('A', 'N') << endl;
19. cout << " \"NBC\" va \"ABC\" ning kattasi: "
20. << maxValue(string("NBC"), string("ABC")) << endl;
21. return 0;
22. }
Natija:
1 va 3 ning kattasi: 3
1.5 va 0.3 ning kattasi: 1.5
‘A’ va ‘N’ ning kattasi: N
"NBC" va "ABC" ning kattasi: NBC
|
Do'stlaringiz bilan baham: |