4-ma’ruza mavzu: konteynerlarning adapterlari. Reja


Funktorlarning ko‘llanilishi



Yüklə 101,97 Kb.
səhifə6/9
tarix13.03.2023
ölçüsü101,97 Kb.
#87657
1   2   3   4   5   6   7   8   9
7mR4KWxfJ8qoGNevKKGw6M3I810z9dkwz8bcQr7T

Funktorlarning ko‘llanilishi. Funktor so‘zi C++ da “funksional obʻyektlar” ning qisqartmasidan olingan. C++ da funksional obʻyekt - operator() bilan aniqlangan sinfning nusxasi hisoblanadi. Agar C++ sinfi operator() aniqlasangiz, u funksiya kabi ishladi, ammo holatni saqlay olmaydi. Masalan, 4.11-dasturga qarang.
4.11-dastur. Operator()ni qayta ishlatish.



#include "stdafx.h"
#include #include using namespace std;
class SimpleFunctor { string name_; public:
SimpleFunctor(const char *name) : name_(name) {}
void operator()() { cout << "Salom, " << name_ << " ishlar zoʻrmi!" << endl; }
};
int main() {
SimpleFunctor sf("Akbar"); sf(); system("pause"); return 0;
}


4.11-dastur. Output

Salom, Akbar ishlar zoʻrmi!

Dasturda sf obʻyekt bo‘lishidan qaʻtiy nazar sf() funksiyasini chaqiramiz.
Chunki SimpleFunctop sinfida operator() aniqlangan.
Ko‘p hollarda STL kutubxonasining taqqoslash va xatolik funksiyasining algoritmlarida funktorlar C++ da predikatlar sifatida ishlatiladi. Faraz qilaymiz, sonlar ketma ketligi berilgan. Bu ketma ketlikdagi barcha juft sonlar va toq sonlar yig‘indisini hisoblash kerak bo‘lsin. Bu masalani yechish uchun funktor va for_each algoritmidan foydalanish mumkin.
4.12-dastur. Funktor va for_each algoritmidan foydalanish.

#include "stdafx.h" #include #include #include using namespace std;
class EvenOddFunctor { int even_; int odd_; public:
EvenOddFunctor() : even_(0), odd_(0) {} void operator()(int x) { if (x%2 == 0) even_ += x; else odd_ += x;
}
int even_sum() const { return even_; } int odd_sum() const { return odd_; }
};
int main() {
EvenOddFunctor evenodd;

int my_list[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };


evenodd = for_each(my_list,
my_list+sizeof(my_list)/sizeof(my_list[0]), evenodd);

cout << " Juftlar yigʻindisi: " << evenodd.even_sum() << endl; cout << " Toqtlar yigʻindisi: " << evenodd.odd_sum() << endl;


system("pause"); return 0;
}


4.12-dastur. Output

Juftlar yigʻindisi: 30
Toqtlar yigʻindisi: 25

Dasturda for_each da EvenOddFunctor sinf obʻyekti berilgan. for_each my_list bo‘yicha ketma ket o‘tganda funktor funksiyani chaqirmoqda. Har takrorlanishda evenodd funktor nusxasini qaytaradi. Evenodd funktor esa juft yoki toq elmentlarni yig‘indisini saqlaydi.

Yüklə 101,97 Kb.

Dostları ilə paylaş:
1   2   3   4   5   6   7   8   9




Verilənlər bazası müəlliflik hüququ ilə müdafiə olunur ©azkurs.org 2024
rəhbərliyinə müraciət

gir | qeydiyyatdan keç
    Ana səhifə


yükləyin