4-misol. Calculator nomli sinf hosil qiling. Unda asosiy amallar: qo’shish, ayirish, ko’paytirish, bo’lish amallarini bajarish metodlarini hosil qiling. Sinf shablonidan foydalaning
#include
using namespace std;
template
class Calculator {
private:
T num1, num2;
public:
Calculator(T n1, T n2) {
num1 = n1;
num2 = n2;
}
void displayResult() {
cout << "Numbers: " << num1 << " and " << num2 << "." << endl;
cout << num1 << " + " << num2 << " = " << add() << endl;
cout << num1 << " - " << num2 << " = " << subtract() << endl;
cout << num1 << " * " << num2 << " = " << multiply() << endl;
cout << num1 << " / " << num2 << " = " << divide() << endl;
}
T add() { return num1 + num2; }
T subtract() { return num1 - num2; }
T multiply() { return num1 * num2; }
T divide() { return num1 / num2; }
};
int main() {
Calculator intCalc(2, 1);
Calculator floatCalc(2.4, 1.2);
cout << "Int results:" << endl;
intCalc.displayResult();
cout << endl
<< "Float results:" << endl;
floatCalc.displayResult();
return 0;
}
5-misol. BubbleSort algoritmini shablonlar orqali tuzing
// CPP code for bubble sort
// using template function
#include
using namespace std;
// A template function to implement bubble sort.
// We can use this for any data type that supports
// comparison operator < and swap works for it.
template
void bubbleSort(T a[], int n) {
for (int i = 0; i < n - 1; i++)
for (int j = n - 1; i < j; j--)
if (a[j] < a[j - 1])
swap(a[j], a[j - 1]);
}
// Driver Code
int main() {
int a[5] = {10, 50, 30, 40, 20};
int n = sizeof(a) / sizeof(a[0]);
// calls template function
bubbleSort(a, n);
cout << " Sorted array : ";
for (int i = 0; i < n; i++)
cout << a[i] << " ";
cout << endl;
return 0;
}
6-misol. Berilgan ikkita qiymatni o’zaro almashtirish funksiyasini funksiya shabloni orqali tuzing.
#include
using namespace std;
template
void func_swap(T &arg1, T &arg2)
{
T temp;
temp = arg1;
arg1 = arg2;
arg2 = temp;
}
int main()
{
int num1 = 10, num2 = 20;
double d1 = 100.53, d2 = 435.54;
char ch1 = 'A', ch2 = 'Z';
cout << "Original data\n";
cout << "num1 = " << num1 << "\tnum2 = " << num2<cout << "d1 = " << d1 << "\td2 = " << d2<cout << "ch1 = " << ch1 << "\t\tch2 = " << ch2<func_swap(num1, num2);
func_swap(d1, d2);
func_swap(ch1, ch2);
cout << "\n\nData after swapping\n";
cout << "num1 = " << num1 << "\tnum2 = " << num2<cout << "d1 = " << d1 << "\td2 = " << d2<cout << "ch1 = " << ch1 << "\t\tch2 = " << ch2<return 0;
}
21-22-AMALIY MASHG’ULOT. ISTISNOLI HOLATLAR VA ULARNI QAYTA ISHLASH. ISTISNOLI HOLATLARNI KONSTRUKTORLARDA GENERASIYA QILISH. ISTISNOLI HOLATLAR VA VORISLIK. ISTISNOLI HOLATLAR SPESIFIKASIYASI. ISTISNOLI HOLATLAR SINFLARI
1-misol. Qaytish kodlari ishlamasa qayta foydalanish mumkin bo'lgan kodni yozishda xatolarni qayta ishlashga ehtiyoj bor. Mumkin bo'lgan xatolarni hal qilishning eng keng tarqalgan usullaridan biri bu return operatori qaytaradigan qaytarish kodlaridan (yoki "chiqish kodlari") foydalanishdir. Masalan:
int findFirstChar(const char* string, char ch)
{
// Satrdagi har bir belgini ko'rib chiqish
for (int index=0; index < strlen(string); ++index)
// Agar joriy belgi ch o'zgaruvchining qiymatiga
//mos kelsa, u holda ushbu belgi indeksini qaytaring
if (string[index] == ch)
return index;
// Agar mos keladigan topilmasa, -1 ni qaytaring
return -1;
}
Bu funksiya uzatilayotgan satrning ch o‘zgaruvchisi qiymatiga mos keladigan birinchi belgisi indeksini qaytaradi. Agar belgi topilmasa, funktsiya xato ko'rsatkichi sifatida -1 ni qaytaradi.
2-misol. Bu yerda xatoliklarni qayta ishlash mexanizmi kerak, chunki agar foydalanuvchi b parametri sifatida 0 ni o'tkazsa, u muvaffaqiyatsiz bo'ladi. Bundan tashqari, funktsiya static_cast (a) / b operatsiyasining natijasini ham qaytarishi kerak. Buni qanday qilish mumkin? Variantlardan biri amal natijasini yoki yakuniy kodni mos yozuvlar bo'yicha qaytarishdir, masalan:
#include
using namespace std;
double divide(int a, int b, bool &success)
{
if (b == 0)
{
success = false;
return 0.0;
}
success = true;
return static_cast(a)/b;
}
int main()
{
bool success;
double result = divide(7, 0, success);
// operatsiya muvaffaqiyatli bo'ladimi yoki yo'qligini
//oldindan bilish uchun biz hozir bool qiymatini o'tkazmoqdamiz
if (!success)
// resultdan foydalanishdan oldin operatsiya natijasini tekshiring
cerr << "Xatolik yuz berdi" << endl;
else
cout << "Natija: " << result << '\n';
}
Istisnolar. Istisnolarni qayta ishlash xatolarni yoki boshqa istisno holatlarni kodni bajarishning umumiy oqimidan ajratish mexanizmini ta'minlaydi. Bu muayyan vaziyatlarda ko'proq erkinlik beradi, shu bilan birga kodlarni qaytaradigan tartibsizliklarni kamaytiradi.
Quyida biz C++ da istisnolardan foydalanish tamoyillarini ko'rib chiqamiz.
Do'stlaringiz bilan baham: |