/* Aşağıdaki Random sınıfı işlev 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 işlevi 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 işlev çağırma işleci yükleniyor. Bu işlev içinde standart rand işlevi 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 işlevinin geri dönüş değerinden faydalanılıyor. Eğer artık üretilecek başka bir değer kalmamışsa işlev içinde logic_error sınıfı türünden bir hata nesnesi gönderiliyor. */ #include #include #include using namespace std; class Random { const int m_low, m_high; std::set 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; }