
/*
     Eduardo Augusto Bezerra <Eduardo.Bezerra@eel.ufsc.br>   

     Departamento de Engenharia Elétrica, CTC, UFSC 

     Agosto de 2012.

 Exercicio:

 1. Estudar as classes abaixo;
 2. Escrever a saida fornecida pelo programa.

*/

#include <iostream>
using namespace std;

class Mammal
{
  public:
    Mammal(): hisAge(2) {}
    ~Mammal() {}
    void Speak() const { cout << "Mammal Speak!\n"; }
    void setAge(int newAge) {hisAge = newAge;}
    int getAge() {return hisAge;}

  protected:
    int hisAge;

};

class Dog : public Mammal
{
  public:
    void Speak() const          { cout << "Woef!\n"; }
    void setAge(int newAge) {hisAge = newAge;}
    int getAge() {return hisAge;}
};

class Cat : public Mammal
{
  public:
    void Speak() const          { cout << "Miauw!\n"; }
    void setAge(int newAge) {hisAge = newAge;}
    int getAge() {return hisAge;}
};

class Horse : public Mammal
{
  public:
    void Speak() const          { cout << "Hinnik!\n"; }
    void setAge(int newAge) {hisAge = newAge;}
    int getAge() {return hisAge;}
};

class Pig : public Mammal
{
  public:
    void Speak() const          { cout << "Knor!\n"; }
    void setAge(int newAge) {hisAge = newAge;}
    int getAge() {return hisAge;}
};

int main()
{
  Pig p;
  p.Speak();
  p.setAge(2);
  Horse h;
  h.Speak();
  h.setAge(4);
  cout << "Pig's age: " << p.getAge() << endl;
  cout << "Horse's age: " << h.getAge() << endl;
  Mammal m;
  m.Speak();

  return 0;
}

