Data slicing with passing by value : object parameters « Function « 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"; }
 };
 
 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!
Meow!
Animal speak!
Animal speak!
Animal speak!
Animal speak!










7.5.object parameters
7.5.1.Pass an object to a function
7.5.2.Constructors, destructors, and passing objects
7.5.3.Copy constructor invoked when passing an object to a function
7.5.4.Passing pointers to objects
7.5.5.Data slicing with passing by value
7.5.6.Passing Objects to Functions