// Stephen Jackson // Section Wilkerson // 4 / 4 / 07 // Something about cows #ifndef BOVINE_H #define BOVINE_H #include #include #include #include #include #include "disease.h" using namespace std; // IMPORTANT CONSTANTS // The following must be declared globablly in some file const float BOVINE_PERCENT_RETAINED = 0.1; //How much food is retained by the animal const float BOVINE_PERCENT_POOED = 0.3; const float BOVINE_FERTILITY_RATE = 0.5; const char BOVINE_DEFAULT_CLASS = '\0'; //Default Classification const char BOVINE_HEIFER_CLASS = 'h'; const char BOVINE_COW_CLASS = 'c'; const char BOVINE_STEER_CLASS = 's'; const char BOVINE_BULL_CLASS = 'b'; const int BOVINE_MAX_WEIGHT = 80; //Default Weight const int BOVINE_MIN_WEIGHT = 70; //Default Weight const int BOVINE_MAX_CWUF = 10; const int BOVINE_MIN_CWUF = -5; const float BOVINE_FACTOR_CWUF = 100.0; const int BOVINE_ADULTHOOD_DAY = 729; const int BOVINE_PERCENT_PRECISION = 10000; const string NAMES_FILE = "names.dat"; const int NAMES_COUNT = 24; const int BOVINE_PREG_TERM = 282; class disease; class bovine { //Special Addition to bClass. There is a legal flag of Null byte to represent a null cow for the purpose //Of function arguement default cases! friend void exposeToDisease(const disease &aDisease, bovine &aCow); friend class farmer; public: //Bovine Function without arguements for making a herd //Precondition: None //Postcondition: A Well Configured Bovine bovine(); //Overloaded Bovine //Precondition: Character for determining gender status of cow (They are very sensitive about this sort of thing) and its weight. //PostCondition: A well Configured Bovine bovine(char classification, int weight, int age, string name); //Print Command //Precondition: None //Postcondition: Out put to the screen displaying wonderful factiods about the bovine (NO TRAILING ENDL) void print() const; //Eat Command //Precondition: Two Integers, The first of which must be smaller than the second of which and must have a range of at least 1~! //Postcondition: A fatter Bovine. void eat(int minFoodConsumed, int maxFoodConsumed); //Print Total Consumed //Precondition: None //Postcondition: A total of the amount of food the bovine has consumed so far returned from the func float getTotalFeedConsumed() const; //Get Bovine Flag //Precondition: None //Postcondition: A Char with the flag of the bovine char getBovineFlag() const; //BoomShakaLaka (AKA INTERCOURSE :O :O :O) //Precondition: Assumed To be Checked. Cow must be h or c class. //PostCondition: Perhaps a cow who is pregnant? ? ? bool boomShakaLaka(); //kill() //Preconditon: None //Postconditon: bDead set to true; void kill(); //isDead; //precondtion: None //postconditon: boolean statement about the aliveness of the cow bool isDead() const; //getAge //precondtion: None //Postcondtion: the age of the cow returned as int int getAge() const; //Age Command //Precondition: None //Postcondition: The bovine's age increased by one, a bovine produced if they are due. bovine age(); //fetches the cow's Name //Precondition: None //Postcondition: The cows name returned as string string getName() const; private: int bTotalFoodConsumed; //How Much Food they Ate; int bAge; // Age In Days float bWeight; // the weight of the bovine in question float bTotalWaste; // The amount of poo the cow has made char bClass; // The gender related issues of the cow bool bDead; // Boolean Dead bool bPreg; // If the cow is pregnant int bPregStart; // day thier pregnancy started. disease bDisease; // The disease the cow is infected with string bName; // Cow's Name //Poo Command //Precondition: Some amount of consumed Food //Post Condtion: A fine pile of excrement float poo(int foodConsumed); }; //+ operator override //Pre: Takes in two cows and if they are politically correct they DO IT. ooo //Post: a knocked up cow bool operator+(bovine &cattleA, bovine &cattleB); // ! operator override //Pre: Takes in a cow, that may or may not already be dead //Post: Kills the cow if it isn't already dead and returns true if the cow was sucessfully executed haha pun. bool operator!(bovine &cattleA); #endif