Mega Code Archive

 
Categories / C++ / Data Type
 

Data Slicing With Passing by Value

#include <iostream> using namespace std; class Mammal{   public:      Mammal():itsAge(1) { }      virtual ~Mammal() { }      virtual void Speak() const { cout << "Mammal speak!" << endl; }   protected:      int itsAge; }; class Dog : public Mammal{   public:     void Speak()const { cout << "Woof!" << endl; } }; class Cat : public Mammal {   public:     void Speak()const { cout << "Meow!" << endl; } }; void ValueFunction (Mammal); void PtrFunction (Mammal*); void RefFunction (Mammal&); int main() {    Mammal* ptr=0;    int choice;    while (1)    {       bool fQuit = false;       cout << "(1)dog (2)cat (0)Quit: ";       cin >> choice;       switch (choice)       {           case 0: fQuit = true;                   break;           case 1: ptr = new Dog;                   break;           case 2: ptr = new Cat;                   break;           default: ptr = new Mammal;                    break;       }       if (fQuit == true)          break;       PtrFunction(ptr);       RefFunction(*ptr);       ValueFunction(*ptr);    }    return 0; } void ValueFunction (Mammal MammalValue) {    MammalValue.Speak(); } void PtrFunction (Mammal * pMammal) {    pMammal->Speak(); } void RefFunction (Mammal & rMammal) {    rMammal.Speak(); }