⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 slicing.cpp

📁 《24学时精通c++》的光盘内容
💻 CPP
字号:
 //Listing 17.3 Data slicing with passing by value
 #include <iostream> 

 class Mammal
 {
 public: 
     Mammal():itsAge(1) {  }
     ~Mammal() { }
     virtual void Speak() const { std::cout << "Mammal speak!\n"; }
 protected:
     int itsAge;
 };

 class Dog : public Mammal
 {
 public:
     void Speak()const { std::cout << "Woof!\n"; }
 };

 class Cat : public Mammal
 {
 public:
     void Speak()const { std::cout << "Meow!\n"; }
 };

 void ValueFunction (Mammal);
 void PtrFunction   (Mammal*);
 void RefFunction   (Mammal&);

 int main()
 {
     Mammal* ptr=0;
     int choice;
     while (1)
     {
         bool fQuit = false;
         std::cout << "(1)dog (2)cat (0)Quit: ";
         std::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)
             break;
         PtrFunction(ptr);
         RefFunction(*ptr);
         ValueFunction(*ptr);
     }
     return 0;
 }

 void ValueFunction (Mammal MammalValue) // This function is called last
 {
     MammalValue.Speak();
 }

 void PtrFunction (Mammal * pMammal)
 {
     pMammal->Speak();
 }

 void RefFunction (Mammal & rMammal)
 {
     rMammal.Speak();
 }

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -