Mega Code Archive

 
Categories / C++ Tutorial / Function
 

Data slicing with passing by value

#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"; }  };    void ValueFunction (Animal);  void PtrFunction   (Animal*);  void RefFunction   (Animal&);    int main()  {      Animal* ptr=0;      int choice;      ptr = new Dog;      PtrFunction(ptr);      RefFunction(*ptr);      ValueFunction(*ptr);      ptr = new Cat;      PtrFunction(ptr);      RefFunction(*ptr);      ValueFunction(*ptr);      ptr = new Animal;      PtrFunction(ptr);      RefFunction(*ptr);      ValueFunction(*ptr);      return 0;  }    void ValueFunction (Animal AnimalValue)  {      AnimalValue.Speak();  }    void PtrFunction (Animal * pAnimal)  {      pAnimal->Speak();  }    void RefFunction (Animal & rAnimal)  {      rAnimal.Speak();  } Woof! Woof! Animal speak! Meow! Animal speak!