Fonksiyon Nesnelerinin Kullanımı - Belirli aralıkta Bir Kez Rastgele Değer Üreten Fonksiyon
Aşağıdaki Random sınıfı fonksiyon nesnelerinin kullanımına güzel bir örnek oluşturuyor. Random isimli sınıfın iki private elemanı üretilecek rastgele sayıların en düşük ve en yüksek değerlerini tutuyor. Sınıfın kurucu fonksiyonu ile bu değerler dışarıdan alınıyor. Sınıfın diğer elemanı ise standart set sınıfından bir nesne. set içinde aynı değerden yalnızca bir tane tutulabilir değil mi? Sınıf için fonksiyon çağırma operatörü yükleniyor. Bu fonksiyon içinde standart rand fonksiyonu ile belirli aralıkta rastgele sayı üretiliyor ve bu sayı sete eklenmeye çalışılıyor. Ekleme başarısız olduğu sürece bu işlem yineleniyor. Ekleme işleminin başarısı için set sınıfının insert fonksiyonunun geri dönüş değerinden faydalanılıyor.
Eğer artık üretilecek başka bir değer kalmamışsa fonksiyon içinde logic_error sınıfı türünden bir hata nesnesi gönderiliyor.
41 85 72 38 80 69 65 68 96 22 49 67 51 61 63 87 66 24 83 71 60 64 52 90 31 23 99
94 11 25 15 13 39 97 19 76 12 33 18 92 35 74 0 95 32 37 45 57 5 86 8 54 75 70 2
9 58 46 17 3 48 77 59 62 2 78 7 84 47 34 21 20 9 28 100 93 4 79 81 98 91 82 1 42
88 53 56 44 73 30 89 55 40 10 27 43 16 6 26 14 36 50
#include <iostream> #include <set> #include <stdexcept> using namespace std; class Random { const int m_low, m_high; std::set<int> mset; public: Random(int l, int h): m_low(l), m_high(h){} int operator()(); }; int Random::operator()() { const int dif = m_high - m_low + 1; if (mset.size() == dif) throw logic_error("no more random numbers in class Random"); int val; while (!mset.insert(val = rand() % dif + m_low).second) ; return val; } int main() { Random urand(0, 100); for (int k = 0; k < 101; ++k) cout << urand() << " "; return 0; }