- 覆盖失败?
 
- 如何避免覆盖失败?
 
- 缺省参数谁说了算?
 
虚函数表
缺省参数
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88
   | #include <iostream>
  class Base { public:     virtual void display(const std::string &strShow = "I am Base class !")     {         std::cout << std::endl;         std::cout << strShow << std::endl;         std::cout << "Base display" << std::endl;     }     virtual ~Base()     {     } };
  class Derive : public Base { public:     virtual void display(const std::string &strShow = "I am Derive class !")     {         std::cout << std::endl;         std::cout << strShow << std::endl;         std::cout << "Derive display" << std::endl;     }     virtual ~Derive()     {     } };
  class Third : public Derive { public:     virtual void display(const std::string &strShow = "I am Third class !")     {         std::cout << std::endl;         std::cout << strShow << std::endl;         std::cout << "Third display" << std::endl;     }     virtual ~Third()     {     } };
  int main() {     Base *pBase = new Third();     Derive *pDerive = new Third();     Third *pThird = new Third();          Third *pThirdBase = static_cast<Third *>(pBase);     Third *pThirdDerive = static_cast<Third *>(pDerive);
      Base *pBaseThird = (Base *)pThird;     Base *pDeriveThird = (Derive *)pThird;
      pBase->display();     pDerive->display();     pThird->display();     pThirdBase->display();     pThirdDerive->display();     pBaseThird->display();     pDeriveThird->display(); }
  =================================================================================
  输出结果: I am Base class ! Third display
  I am Derive class ! Third display
  I am Third class ! Third display
  I am Third class ! Third display
  I am Third class ! Third display
  I am Base class ! Third display
  I am Base class ! Third display
   | 
 
注: 根据汇编显示,虚函数调用时,压栈的缺省实参与指针类型(非对象实际类型)保持一致。