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

📄 hour17_2.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"; }   // virtual removed
 protected:
     int itsAge;
 };

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

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

 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();  // this refers to base class; if it is not virtual, then
                           // base gets executed!!! When the base class *is* virtual, then
                           // the derived class methods can be called. 
 }

 void PtrFunction (Mammal * pMammal)
 {
     pMammal->Speak();    // See comments above!
 }

 void RefFunction (Mammal & rMammal)
 {
     rMammal.Speak();      // See comments above
 }

⌨️ 快捷键说明

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