ptrtomember.cpp

来自「《24学时精通c++》的光盘内容」· C++ 代码 · 共 85 行

CPP
85
字号
 //Listing 20.9 Pointers to member functions 

 #include <iostream>

 

 enum BOOL {FALSE, TRUE};

 

 class Mammal

 {

 public:

     Mammal():itsAge(1) {  }

     virtual ~Mammal() { }

     virtual void Speak() const = 0;

     virtual void Move() const = 0;

 protected:

     int itsAge;

 };

 

 class Dog : public Mammal

 {

 public:

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

     void Move() const { std::cout << "Walking to heel...\n"; }

 };

 

 class Cat : public Mammal

 {

 public:

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

     void Move() const { std::cout << "slinking...\n"; }

 };

 

 class Horse : public Mammal

 {

 public:

     void Speak()const { std::cout << "Winnie!\n"; }

     void Move() const { std::cout << "Galloping...\n"; }

 };

 

 int main()

 {

     void (Mammal::*pFunc)() const =0;

     Mammal* ptr =0;

     int Animal;

     int Method;

     bool fQuit = false;

 

     while (fQuit == false)

     {

         std::cout << "(0)Quit (1)dog (2)cat (3)horse: ";

         std::cin >> Animal;

         switch (Animal)

         {

         case 1: 

             ptr = new Dog; 

             break;

         case 2: 

             ptr = new Cat; 

             break;

         case 3: 

             ptr = new Horse; 

             break;

         default: 

             fQuit = true; 

             break;

         }

         if (fQuit)

             break;

 

         std::cout << "(1)Speak  (2)Move: ";

         std::cin >> Method;

         switch (Method)

         {

         case 1: 

             pFunc = Mammal::Speak; 

             break;

         default: 

             pFunc = Mammal::Move; 

             break;

         }

 

         (ptr->*pFunc)();

         delete ptr;

     }

     return 0;

 }

⌨️ 快捷键说明

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