/*
Quote from
Teach Yourself C++ in 24 Hours, 4th Edition
Publisher: Sams; 4 edition (August 11, 2004)
Language: English
ISBN-10: 0672326817
ISBN-13: 978-0672326813
by Jesse Liberty (Author), David Horvath (Author)
*/
#include <iostream>
enum COLOR { Red, Green, Blue, Yellow, White, Black, Brown } ;
class Animal // common base to both horse and bird
{
public:
Animal(int);
virtual ~Animal() {
std::cout << "Animal destructor...\n";
}
virtual int GetAge() const {
return itsAge;
}
virtual void SetAge(int age) {
itsAge = age;
}
virtual void Sleep() const = 0;
virtual void Eat() const = 0;
virtual void Reproduce() const = 0;
virtual void Move() const = 0;
virtual void Speak() const = 0;
private:
int itsAge;
};
Animal::Animal(int age):itsAge(age)
{
std::cout << "Animal constructor...\n";
}
class Mammal : public Animal
{
public:
Mammal(int age):Animal(age) {
std::cout << "Mammal constructor...\n";
}
virtual ~Mammal() {
std::cout << "Mammal destructor...\n";
}
virtual void Reproduce() const {
std::cout << "Mammal reproduction depicted...\n";
}
};
class Fish : public Animal
{
public:
Fish(int age):Animal(age) {
std::cout << "Fish constructor...\n";
}
virtual ~Fish() {
std::cout << "Fish destructor...\n";
}
virtual void Sleep() const {
std::cout << "fish snoring...\n";
}
virtual void Eat() const {
std::cout << "fish feeding...\n";
}
virtual void Reproduce() const {
std::cout << "fish laying eggs...\n";
}
virtual void Move() const {
std::cout << "fish swimming...\n";
}
virtual void Speak() const { }
};
class Horse : public Mammal
{
public:
Horse(int age, COLOR color ): Mammal(age), itsColor(color) {
std::cout << "Horse constructor...\n";
}
virtual ~Horse() {
std::cout << "Horse destructor...\n";
}
virtual void Speak()const {
std::cout << "Whinny!... \n";
}
virtual COLOR GetItsColor() const
{ return itsColor; }
virtual void Sleep() const
{ std::cout << "Horse snoring...\n"; }
virtual void Eat() const
{ std::cout << "Horse feeding...\n"; }
virtual void Move() const
{ std::cout << "Horse running...\n";}
protected:
COLOR itsColor;
};
class Dog : public Mammal
{
public:
Dog(int age, COLOR color ):
Mammal(age), itsColor(color)
{ std::cout << "Dog constructor...\n"; }
virtual ~Dog()
{ std::cout << "Dog destructor...\n"; }
virtual void Speak()const
{ std::cout << "Whoof!... \n"; }
virtual void Sleep() const
{ std::cout << "Dog snoring...\n"; }
virtual void Eat() const
{ std::cout << "Dog eating...\n"; }
virtual void Move() const
{ std::cout << "Dog running...\n"; }
virtual void Reproduce() const
{ std::cout << "Dogs reproducing...\n"; }
protected:
COLOR itsColor;
};
int main()
{
Animal *pAnimal=0;
pAnimal = new Dog(5,Brown);
pAnimal->Speak();
pAnimal->Eat();
pAnimal->Reproduce();
pAnimal->Move();
pAnimal->Sleep();
delete pAnimal;
pAnimal = new Horse(4,Black);
pAnimal->Speak();
pAnimal->Eat();
pAnimal->Reproduce();
pAnimal->Move();
pAnimal->Sleep();
delete pAnimal;
pAnimal = new Fish (5);
pAnimal->Speak();
pAnimal->Eat();
pAnimal->Reproduce();
pAnimal->Move();
pAnimal->Sleep();
delete pAnimal;
return 0;
}
|