//--------------------------------------------------------------------- // Sýnislausn á dæmi 4 á Vikublaði 3 í Tölvunarfræði 2, vor 2005 // // Hjálmtýr Hafsteinsson, janúar 2005 //--------------------------------------------------------------------- #include #include #include #include using namespace std; //--------------- Bird ------------------- // // Skilgreining á Bird klasa class Bird { public: Bird(int initialAge = 1); ~Bird(); int GetAge(); void SetAge(int age); void Tweet(); private: int itsAge; }; // Útfærsla á aðferðum Bird klasa Bird::Bird(int initialAge) { itsAge = initialAge; } Bird::~Bird() { } int Bird::GetAge() { return itsAge; } void Bird::SetAge(int age) { itsAge = age; } void Bird::Tweet() { cout << "Tweet.\n"; } //--------------- Cat ------------------- // // Skilgreining á Cat klasa class Cat { public: Cat(int initialAge); ~Cat(); int GetAge(); void SetAge(int age); void Meow(); void Attack(Bird bibi); private: int itsAge; int caughtBirds; int successProb(); // Falið fall sem reiknar líkur }; // Útfærsla á aðferðum Cat klasa Cat::Cat(int initialAge) { itsAge = initialAge; caughtBirds = 0; } Cat::~Cat() { } int Cat::GetAge() { return itsAge; } void Cat::SetAge(int age) { itsAge = age; } void Cat::Meow() { cout << "Meow.\n"; } // Aðferðin Attack lætur köttinn ráðast á fuglinn bibi. // Árangur kattarins ræðst af lærdómsfallinu successProb() void Cat::Attack(Bird bibi) { if( (rand() % 100) < successProb() ) { cout << "Smjatt, smjatt" << endl; caughtBirds++; } else { cout << "Arg!" << endl; bibi.Tweet(); // Fuglinn fagnar frelsinu! } } // Fallið prob gefur líkurnar á því að kötturinn nái fuglinum // byggt á því hve mörgum fuglum hann hefur náð hingað til. // Það gefur gildi frá 10 (engum fugli náð) til 99 (eftir nokkuð // marga veidda fugla). int Cat::successProb() { return 90*(1.0 - 1.0/(sqrt(sqrt(caughtBirds+1.0)))) + 10; } // Aðalforrit sem lætur köttinn ráðast á nokkra fugla! int main() { Cat Frisky(5); Bird Bibi[100]; int i; // Upphafsstilla slembitölugjafa srand( (unsigned)time( NULL ) ); Frisky.Meow(); for( i=0; i<100; i++ ) Frisky.Attack( Bibi[i] ); return 0; }