// animals.h #ifndef ANIMALS__INCLUDED #define ANIMALS__INCLUDED #include #include #include // // class Owner // <> // class Owner { public: Owner(); ~Owner(); friend ostream & operator<<(ostream & o_stream, Owner & o_obj); virtual void stream(ostream & o_stream, int indent= 0); char * get_name() const; void set_name(char * _v); protected: char * name; private: }; // <> inline char * Owner::get_name() const { printf("Entering method Owner::get_name <>.\n"); return name; } // <> inline void Owner::set_name(char * _v) { printf("Entering method Owner::set_name <>.\n"); if(!_v) return; if(name) delete [] name; name = new char[strlen(_v)+1]; strcpy(name, _v); } // // class Animal // <> // class Animal { public: Animal(); ~Animal(); friend ostream & operator<<(ostream & o_stream, Animal & o_obj); virtual void stream(ostream & o_stream, int indent= 0); virtual void talk(int num) const = 0; char * get_name() const; void set_name(char * _v); Owner * get_owner() const; void set_owner(Owner * _v); protected: char * name; Owner * owner; private: }; // <> inline char * Animal::get_name() const { printf("Entering method Animal::get_name <>.\n"); return name; } // <> inline void Animal::set_name(char * _v) { printf("Entering method Animal::set_name <>.\n"); if(!_v) return; if(name) delete [] name; name = new char[strlen(_v)+1]; strcpy(name, _v); } // <> inline Owner * Animal::get_owner() const { printf("Entering method Animal::get_owner <>.\n"); return owner; } // <> inline void Animal::set_owner(Owner * _v) { printf("Entering method Animal::set_owner <>.\n"); owner = _v; } // // class Dog // <> // class Dog : public Animal { public: Dog(); ~Dog(); friend ostream & operator<<(ostream & o_stream, Dog & o_obj); virtual void stream(ostream & o_stream, int indent= 0); virtual void talk(int num) const; protected: private: }; // // class Cat // <> // class Cat : public Animal { public: Cat(); ~Cat(); friend ostream & operator<<(ostream & o_stream, Cat & o_obj); virtual void stream(ostream & o_stream, int indent= 0); virtual void talk(int num) const; protected: private: }; // // class Snake // <> // class Snake : public Animal { public: Snake(); ~Snake(); friend ostream & operator<<(ostream & o_stream, Snake & o_obj); virtual void stream(ostream & o_stream, int indent= 0); virtual void talk(int num) const; protected: private: }; #endif // ANIMALS__INCLUDED