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

📄 dynamiccast.cpp

📁 24学时攻克C++光盘源代码 深入浅出 方便实用
💻 CPP
字号:
 // Listing 18.2 - dynamic cast

 #include <iostream>

 using std::cout; // this file uses std::cout

 

 class Mammal

 {

 public:

     Mammal():itsAge(1) { cout << "Mammal constructor...\n"; }

     virtual ~Mammal() { cout << "Mammal destructor...\n"; }

     virtual void Speak() const { cout << "Mammal speak!\n"; }

 protected:

     int itsAge;

 };

 

 class Cat: public Mammal

 {

 public:

     Cat() { cout << "Cat constructor...\n"; }

     ~Cat() { cout << "Cat destructor...\n"; }

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

     void Purr() const { cout << "rrrrrrrrrrr\n"; }

 };

 

 class Dog: public Mammal

 {

 public:

     Dog() { cout << "Dog Constructor...\n"; }

     ~Dog() { cout << "Dog destructor...\n"; }

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

 };

 

 

 int main()

 {

     const int NumberMammals = 3;

     Mammal* Zoo[NumberMammals];

     Mammal* pMammal;

     int choice,i;

     for (i=0; i<NumberMammals; i++)

     {

         cout << "(1)Dog (2)Cat: ";

         std::cin >> choice;

         if (choice == 1)

             pMammal = new Dog;

         else

             pMammal = new Cat;

 

         Zoo[i] = pMammal;

     }

 

     cout << "\n";

 

     for (i=0; i<NumberMammals; i++)

     {

         Zoo[i]->Speak();

 

         Cat *pRealCat =  dynamic_cast<Cat *> (Zoo[i]);

 

         if (pRealCat)

             pRealCat->Purr();

         else

             cout << "Uh oh, not a cat!\n";

 

         delete Zoo[i];

         cout << "\n";

     }

 

     return 0;

 }

⌨️ 快捷键说明

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