Raqamli texnologiyalar fakulteti dasturiy injiniring yo’nalishi


-misol. Operatorlar, funksiya chaqiruvlari va funksiya shablonlari



Download 1,57 Mb.
bet45/81
Sana23.06.2022
Hajmi1,57 Mb.
#695199
1   ...   41   42   43   44   45   46   47   48   ...   81
Bog'liq
Dasturiy injiniring Dasturlash 2-4

3-misol. 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 funksiya da ushbu funksiyada ishlatiladigan har qanday operatorlar yoki boshqa funksiyalarga murojaatlar aniqlangan/qayta yuklangan bo'lishi kerak, aks holda siz kompilyatsiya xatosini olasiz. 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. Keling, buni amalda ko'rib chiqaylik.
Birinchidan, oddiy sinf yaratamiz. Dollars sinfidagi obyektlar bilan max() funksiyasini chaqirishga harakat qilganda nima sodir bo'lishini ko'rib chiqaylik:

#include


using namespace std;
template
const T& max1(const T& a, const T& b)
{
return (a > b) ? a : b;
}
class Dollars
{
private:
int m_dollars;
public:
Dollars(int dollars)
{
m_dollars = dollars;
}
};
int main()
{
Dollars seven(7);
Dollars twelve(12);
Dollars bigger = max1(seven, twelve);
return 0;
}

C++ tili max () funksiya shablonining quyidagi nusxasini yaratadi:


const Dollars& max(const Dollars &a, const Dollars &b)


{
return (a > b) ? a : b;
}

Keyin kompilyator ushbu funktsiyani kompilyatsiya qilishga harakat qiladi, lekin u ishlamaydi, chunki C++ a> b ifodasini qanday boshqarishni bilmaydi! Shunday qilib, bu xatoga olib keladi:


Ошибка C2676 бинарный ">": "const T" не определяет этот оператор или преобразование к типу приемлемо к встроенному оператору

Ushbu xatolar o'rtacha qiymatga chaqiruv (Dollars *, int) tomonidan yaratilgan funksiya shablonining nusxasi tufayli yuzaga kelgan. Esda tutingki, funksiya shablonini chaqirganda, kompilyator funksiya shablonini parametr turlari bilan ko'chiradi va keyin shablon parametrlari turlarini faktik (jo’natilgan) ma'lumotlar turlari bilan almashtiradi.

#include


using namespace std;
template
T average(T *array, int length)
{
T sum = 0;
for (int count=0; count < length; ++count)
sum += array[count];
sum /= length;
return sum;
}
class Dollars
{
private:
int m_dollars;
public:
Dollars(int dollars)
: m_dollars(dollars)
{
m_dollars = dollars;
}
friend bool operator>(const Dollars &d1, const Dollars &d2)
{
return (d1.m_dollars > d2.m_dollars);
}
friend ostream& operator<< (ostream &out, const Dollars &dollars)
{
out << dollars.m_dollars<< " dollars ";
return out;
}
Dollars& operator+=(Dollars dollars)
{
m_dollars += dollars.m_dollars;
return *this;
}
Dollars& operator/=(int value)
{
m_dollars /= value;
return *this;
}
};

int main()


{
Dollars array3[] = { Dollars(7), Dollars(12), Dollars(18), Dollars(15) };
cout << average(array3, 4) << '\n';

return 0;


}


Download 1,57 Mb.

Do'stlaringiz bilan baham:
1   ...   41   42   43   44   45   46   47   48   ...   81




Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©hozir.org 2024
ma'muriyatiga murojaat qiling

kiriting | ro'yxatdan o'tish
    Bosh sahifa
юртда тантана
Боғда битган
Бугун юртда
Эшитганлар жилманглар
Эшитмадим деманглар
битган бодомлар
Yangiariq tumani
qitish marakazi
Raqamli texnologiyalar
ilishida muhokamadan
tasdiqqa tavsiya
tavsiya etilgan
iqtisodiyot kafedrasi
steiermarkischen landesregierung
asarlaringizni yuboring
o'zingizning asarlaringizni
Iltimos faqat
faqat o'zingizning
steierm rkischen
landesregierung fachabteilung
rkischen landesregierung
hamshira loyihasi
loyihasi mavsum
faolyatining oqibatlari
asosiy adabiyotlar
fakulteti ahborot
ahborot havfsizligi
havfsizligi kafedrasi
fanidan bo’yicha
fakulteti iqtisodiyot
boshqaruv fakulteti
chiqarishda boshqaruv
ishlab chiqarishda
iqtisodiyot fakultet
multiservis tarmoqlari
fanidan asosiy
Uzbek fanidan
mavzulari potok
asosidagi multiservis
'aliyyil a'ziym
billahil 'aliyyil
illaa billahil
quvvata illaa
falah' deganida
Kompyuter savodxonligi
bo’yicha mustaqil
'alal falah'
Hayya 'alal
'alas soloh
Hayya 'alas
mavsum boyicha


yuklab olish