Multiple virtual member functions called in turn : virtual function « Class « C++ Tutorial






#include <iostream>
 
 class Animal
 {
 public:
     Animal():itsAge(1) {  }
     ~Animal() { }
     virtual void Speak() const { std::cout << "Animal speak!\n"; }
 protected:
     int itsAge;
 };
 
 class Dog : public Animal
 {
 public:
     void Speak()const { std::cout << "Woof!\n"; }
 };
 
 
 class Cat : public Animal
 {
 public:
     void Speak()const { std::cout << "Meow!\n"; }
 };
 
 
 class Horse : public Animal
 {
 public:
     void Speak()const { std::cout << "Winnie!\n"; }
 };
 
 class Pig : public Animal
 {
 public:
     void Speak()const { std::cout << "Oink!\n"; }
 };
 
 int main()
 {
     Animal* theArray[5];
     Animal* ptr;
     int i;

     theArray[0] = new Dog;
     theArray[1] = new Cat;
     theArray[2] = new Horse;
     theArray[3] = new Pig;
     theArray[4] = new Animal;
     
     for (i=0;i<5;i++)
         theArray[i]->Speak();
     return 0;
 }
Woof!
Meow!
Winnie!
Oink!
Animal speak!








9.28.virtual function
9.28.1.A virtual function
9.28.2.Access base class's virtual if derived class does not redefine it
9.28.3.Use virtual functions and polymorphism
9.28.4.A pure virtual function
9.28.5.Multiple virtual member functions called in turn
9.28.6.Class with only virtual methods
9.28.7.Use virtual function to calculate area for different shapes
9.28.8.Use Virtual Functions to change the method behaviour
9.28.9.Why Virtual Functions: one interface, multiple methods
9.28.10.Implementing pure virtual functions