// animals.cc #include "animals.h" // // class Owner // <> // // <> Owner::Owner() { printf("Entering ctor Owner <>.\n"); // Owner ctor name = new char[strlen("John")+1]; strcpy(name, "John"); } // <> Owner::~Owner() { printf("Entering dtor ~Owner <>.\n"); // Owner dtor delete[] name; } // <> ostream & operator<<(ostream & o_stream, Owner & o_obj) { o_obj.stream (o_stream, 0); return o_stream; } // <> void Owner::stream(ostream & o_stream, int indent) { int i; for(i= 0; i> // // <> Animal::Animal() { printf("Entering ctor Animal <>.\n"); // Animal ctor name = new char[strlen("Fido")+1]; strcpy(name, "Fido"); owner = 0; } // <> Animal::~Animal() { printf("Entering dtor ~Animal <>.\n"); // Animal dtor delete[] name; } // <> ostream & operator<<(ostream & o_stream, Animal & o_obj) { o_obj.stream (o_stream, 0); return o_stream; } // <> void Animal::stream(ostream & o_stream, int indent) { int i; for(i= 0; i stream(o_stream, indent+3); } for(i= 0; i> int main() { printf("Entering function main <
>.\n"); Dog dog; Cat cat; Snake snake; cat.set_name("Felix"); snake.set_name("Ka"); Owner o1, o2; o2.set_name("Jenna"); dog.set_owner(&o1); cat.set_owner(&o2); cout << "dog= " << dog << endl; dog.talk(3); cout << "cat= " << cat << endl; cat.talk(2); cout << "snake= " << snake << endl; snake.talk(1); cout << "owner 1 = " << o1 << endl; cout << "owner 2 = " << o2 << endl; return 0; } // // class Dog // <> // // <> Dog::Dog() { printf("Entering ctor Dog <>.\n"); // Dog ctor } // <> Dog::~Dog() { printf("Entering dtor ~Dog <>.\n"); // Dog dtor } // <> ostream & operator<<(ostream & o_stream, Dog & o_obj) { o_obj.stream (o_stream, 0); return o_stream; } // <> void Dog::stream(ostream & o_stream, int indent) { int i; for(i= 0; i> void Dog::talk(int num) const { printf("Entering method Dog::talk <>.\n"); for(int i= 0; i> // // <> Cat::Cat() { printf("Entering ctor Cat <>.\n"); // Cat ctor } // <> Cat::~Cat() { printf("Entering dtor ~Cat <>.\n"); // Cat dtor } // <> ostream & operator<<(ostream & o_stream, Cat & o_obj) { o_obj.stream (o_stream, 0); return o_stream; } // <> void Cat::stream(ostream & o_stream, int indent) { int i; for(i= 0; i> void Cat::talk(int num) const { printf("Entering method Cat::talk <>.\n"); for(int i= 0; i> // // <> Snake::Snake() { printf("Entering ctor Snake <>.\n"); // Snake ctor } // <> Snake::~Snake() { printf("Entering dtor ~Snake <>.\n"); // Snake dtor } // <> ostream & operator<<(ostream & o_stream, Snake & o_obj) { o_obj.stream (o_stream, 0); return o_stream; } // <> void Snake::stream(ostream & o_stream, int indent) { int i; for(i= 0; i> void Snake::talk(int num) const { printf("Entering method Snake::talk <>.\n"); for(int i= 0; i